python爬虫程序代码,python爬虫实战案例

  python爬虫程序代码,python爬虫实战案例

  这篇文章主要介绍了三个大蟒爬虫项目实例代码,使用了urllib2库,文中示例代码非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。

  python爬虫代码示例分享

  一、爬取故事段子:推荐学习:Python视频教程

  注:部分代码无法正常运行,但仍有一定的参考价值。

  #编码=utf-8

  导入urllib2

  进口是

  内函吧类():

  def蜘蛛(自身):

  爬虫的主调度器

  isflow=True#判断是否进行下一页

  页面=1

  而isflow:

  URL= http://www。内汉帕。com/article/list _ 5 _ str(page) . html

  html=self.load(url)

  self.deal(html,页面)

  panduan=raw_input(是否继续(是/否)!")

  如果panduan==y:

  isflow=真

  页面=1

  else:

  isflow=False

  定义加载(自身,网址):

  针对全球资源定位器(统一资源定位器)地址进行全部爬去

  :参数url: url地址

  :返回:返回爬去的内容

  header={

  用户代理“:”Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/67。0 .3396 .79 Safari/537.36

  }

  request=urllib2 .请求(网址,头=头)

  response=urllib2.urlopen(请求)

  html=response.read()

  返回超文本标记语言

  def deal(self,html,page):

  对之前爬去的内容进行正则匹配,匹配出标题和正文内容

  :param html:之前爬去的内容

  :参数第:页正在爬去的页码

  parrten=re。编译( Li class= piclist \ d ).*?)/李,回复.s)

  titleList=parrten.findall(html)

  对于标题列表:中的标题

  parrt en 1=re。编译( a href=/article/\ d . html rel= external no follow ).*)/a’)

  ti1=parrten1.findall(标题)

  parrt en 2=re。编译( div class= f18 mb20 ).*?)/div ,re .s)

  til2=parrten2.findall(标题)

  对于ti1:中的英语字母表中第二十个字母

  tr=t.replace(b , ).替换(/b ,)

  self.writeData(tr,page)

  对于til2:中的英语字母表中第二十个字母

  tr=t.replace(p , ).替换(/p , ).替换( br , ).替换( br /, ).替换( ldquo , \ ).替换( rdquo , \ )

  self.writeData(tr,page)

   def writeData(self,context,page):

   '''

   将最终爬去的内容写入文件中

   :param context: 匹配好的内容

   :param page: 当前爬去的页码数

   '''

   fileName = "di" + str(page) + "yehtml.txt"

   with open(fileName, "a") as file:

   file.writelines(context + "\n")

  if __name__ == '__main__':

   n=neihanba()

   n.spider()二、爬取智联:

  

#encoding=utf-8

  import urllib

  import urllib2

  import re

  class zhiLian():

   def spider(self,position,workPlace):

   '''

   爬虫的主调度器

   :param position: 职位

   :param workPlace: 工作地点

   '''

   url="http://sou.zhaopin.com/jobs/searchresult.ashx?"

   url+=urllib.urlencode({"jl":workPlace})

   url+="&"

   url+=urllib.urlencode({"kw":position})

   isflow=True#是否进行下一页的爬去

   page=1

   while isflow:

   url+="&"+str(page)

   html=self.load(url)

   self.deal1(html,page)

   panduan = raw_input("是否继续爬虫下一页(y/n)!")

   if panduan == "y":

   isflow = True

   page += 1

   else:

   isflow = False

   def load(self,url):

   '''

   针对url地址进行全部爬去

   :param url: url地址

   :return: 返回爬去的内容

   '''

   header = {

   "User-Agent": " Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"

   }

   request = urllib2.Request(url, headers=header)

   response = urllib2.urlopen(request)

   html = response.read()

   return html

   def deal1(self,html,page):

   '''

   对之前爬去的内容进行正则匹配,匹配职位所对应的链接

   :param html:之前爬去的内容

   :param page: 正在爬去的页码

   '''

   parrten=re.compile('<a\s+style="font-weight:\s+bold"\s+par="ssidkey=y&ss=\d+&ff=\d+&sg=\w+&so=\d+"\s+href="(.*?)" rel="external nofollow" target="_blank">.*?</a>',re.S)

   til=parrten.findall(html)#爬去链接

   for t in til:

   self.deal2(t,page)

   def deal2(self,t,page):

   '''

   进行二次爬虫,然后在新的页面中对公司、薪资、工作经验进行匹配

   :param t: url地址

   :param page: 当前匹配的页数

   '''

   html=self.load(t)#返回二次爬虫的内容

   parrten1=re.compile('<a\s+onclick=".*?"\s+href=".*?" rel="external nofollow" \s+target="_blank">(.*?)\s+.*?<img\s+class=".*?"\s+src=".*?"\s+border="\d+"\s+vinfo=".*?"></a>',re.S)

   parrten2=re.compile('<li><span>职位月薪:</span><strong>(.*?) <a.*?>.*?</a></strong></li>',re.S)

   parrent3=re.compile('<li><span>工作经验:</span><strong>(.*?)</strong></li>',re.S)

   til1=parrten1.findall(html)

   til2=parrten2.findall(html)

   til3=parrent3.findall(html)

   str=""

   for t in til1:

   t=t.replace('<img title="专属页面" src="//img03.zhaopin.cn/2012/img/jobs/icon.png" border="0" />',"")

   str+=t

   str+="\t"

   for t in til2:

   str+=t

   str += "\t"

   for t in til3:

   str+=t

   self.writeData(str,page)

   def writeData(self,context,page):

   '''

   将最终爬去的内容写入文件中

   :param context: 匹配好的内容

   :param page: 当前爬去的页码数

   '''

   fileName = "di" + str(page) + "yehtml.txt"

   with open(fileName, "a") as file:

   file.writelines(context + "\n")

  if __name__ == '__main__':

   position=raw_input("请输入职位:")

   workPlace=raw_input("请输入工作地点:")

   z=zhiLian()

   z.spider(position,workPlace)

三、爬取贴吧:

  

#encoding=utf-8

  import urllib

  import urllib2

  import re

  class teiba():

   def spider(self,name,startPage,endPage):

   url="http://tieba.baidu.com/f?ie=utf-8&"

   url+=urllib.urlencode({"kw":name})

   for page in range(startPage,endPage+1):

   pn=50*(page-1)

   urlFull=url+"&"+urllib.urlencode({"pn":pn})

   html=self.loadPage(url)

   self.dealPage(html,page)

   def loadPage(self,url):

   header={

   "User-Agent":" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"

   }

   request=urllib2.Request(url,headers=header)

   response=urllib2.urlopen(request)

   html=response.read()

   return html

   def dealPage(self,html,page):

   partten=re.compile(r'<a\s+rel="noreferrer"\s+href="/p/\d+" rel="external nofollow" \s+title=".*?"\s+target="_blank" class="j_th_tit\s+">(.*?)</a>',re.S)

   titleList=partten.findall(html)

   rstr=r'<span\s+class="topic-tag"\s+data-name=".*?">#(.*?)#</span>'

   for title in titleList:

   title=re.sub(rstr,"",title)

   self.writePage(title,page)

   def writePage(self,context,page):

   fileName="di"+str(page)+"yehtml.txt"

   with open(fileName,"a") as file:

   file.writelines(context+"\n")

  if __name__ == '__main__':

   name=raw_input("请输入贴吧名:")

   startPage=raw_input("请输入起始页:")

   endPage=raw_input("请输入终止页:")

   t=teiba()

   t.spider(name,int(startPage),int(endPage))

更多相关教程,请关注Python教程栏目。以上就是python爬虫代码示例分享的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: