分享

python爬虫代码示例分享

 文炳春秋 2020-04-04

https://www./python-tutorials-444251.html

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

python爬虫代码示例分享

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

#encoding=utf-8

import urllib2

import re

class neihanba():

  def spider(self):

    '''

    爬虫的主调度器

    '''

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

    page=1

    while isflow:

      url="http://www./article/list_5_"+str(page)+".html"

      html=self.load(url)

      self.deal(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 deal(self,html,page):

    '''

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

    :param html:之前爬去的内容

    :param page: 正在爬去的页码

    '''

    parrten=re.compile('<li class="piclist\d+">(.*?)</li>',re.S)

    titleList=parrten.findall(html)

    for title in titleList:

      parrten1=re.compile('<a href="/article/\d+.html" rel="external nofollow" >(.*)</a>')

      ti1=parrten1.findall(title)

      parrten2=re.compile('<div class="f18 mb20">(.*?)</div>',re.S)

      til2=parrten2.findall(title)

      for t in ti1:

        tr=t.replace("<b>","").replace("</b>","")

        self.writeData(tr,page)

      for t in til2:

        tr=t.replace("<p>","").replace("</p>","").replace("<br>","").replace("<br />","").replace("&ldquo","\"").replace("&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()

二、爬取智联:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

#encoding=utf-8

import urllib

import urllib2

import re

class zhiLian():

  def spider(self,position,workPlace):

    '''

    爬虫的主调度器

    :param position: 职位

    :param workPlace: 工作地点

    '''

    url="http://sou./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)

三、爬取贴吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

#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教程栏目。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约