书签 分享 收藏 举报 版权申诉 / 94

类型Python爬虫实战.docx

  • 文档编号:2165741
  • 上传时间:2022-10-27
  • 格式:DOCX
  • 页数:94
  • 大小:7.05MB
包裹的容。

现在我们想获取发布人,发布日期,段子容,以及点赞的个数。

不过另外注意的是,段子有些是带图片的,如果我们想在控制台显示图片是不现实的,所以我们直接把带有图片的段子给它剔除掉,只保存仅含文本的段子。

所以我们加入如下正则表达式来匹配一下,用到的方法是re.findall是找寻所有匹配的容。

方法的用法详情可以看前面说的正则表达式的介绍。

好,我们的正则表达式匹配语句书写如下,在原来的基础上追加如下代码

1

2

3

4

5

6

content=response.read().decode('utf-8')

pattern=pile('

class="author.*?

>.*?

.*?

>(.*?

).*?

class'+

                     '="content".*?

title="(.*?

)">(.*?

(.*?

class="number">(.*?

)',re.S)

items=re.findall(pattern,content)

foriteminitems:

    printitem[0],item[1],item[2],item[3],item[4]

现在正则表达式在这里稍作说明

1).*?

是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?

表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到.*?

的搭配。

2)(.*?

)代表一个分组,在这个正则表达式中我们匹配了五个分组,在后面的遍历item中,item[0]就代表第一个(.*?

)所指代的容,item[1]就代表第二个(.*?

)所指代的容,以此类推。

3)re.S标志代表在匹配时为点任意匹配模式,点.也可以代表换行符。

现在我们可以看一下部分运行结果

儒雅男神2015-02-1714:

34:

42

小时候一个一个拆着放的举个爪…

list=hot&s=4747301″ target=”_blank”onclick=”_hmt.push([‘_trackEvent’,‘post’,‘click’,‘signlePost’])”>

7093

奇怪的名字啊2015-02-1714:

49:

16

回家的路,你追我赶,回家的心情和窗外的一样灿烂。

一路向前,离亲人越来越近了。

哪里有爸妈哪里才是家,希望所有糗友的爸爸妈妈都身体健康…….

4803

这是其中的两个段子,分别打印了发布人,发布时间,发布容,附加图片以及点赞数。

其中,附加图片的容我把图片代码整体抠了出来,这个对应item[3],所以我们只需要进一步判断item[3]里面是否含有img这个字样就可以进行过滤了。

好,我们再把上述代码中的for循环改为下面的样子

1

2

3

4

foriteminitems:

        haveImg=re.search("img",item[3])

        ifnothaveImg:

            printitem[0],item[1],item[2],item[4]

现在,整体的代码如下

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

#-*-coding:

utf-8-*-

importurllib

importurllib2

importre

 

page=1

url='.qiushibaike./hot/page/'+str(page)

user_agent='Mozilla/4.0(compatible;MSIE5.5;WindowsNT)'

headers={'User-Agent':

user_agent}

try:

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

    response=urllib2.urlopen(request)

    content=response.read().decode('utf-8')

    pattern=pile('

class="author.*?

>.*?

.*?

>(.*?

).*?

class'+

                         '="content".*?

title="(.*?

)">(.*?

(.*?

class="number">(.*?

)',re.S)

    items=re.findall(pattern,content)

    foriteminitems:

        haveImg=re.search("img",item[3])

        ifnothaveImg:

            printitem[0],item[1],item[2],item[4]

excepturllib2.URLError,e:

    ifhasattr(e,"code"):

        printe.code

    ifhasattr(e,"reason"):

        printe.reason

运行一下看下效果

恩,带有图片的段子已经被剔除啦。

是不是很开森?

3.完善交互,设计面向对象模式

好啦,现在最核心的部分我们已经完成啦,剩下的就是修一下边边角角的东西,我们想达到的目的是:

按下回车,读取一个段子,显示出段子的发布人,发布日期,容以及点赞个数。

另外我们需要设计面向对象模式,引入类和方法,将代码做一下优化和封装,最后,我们的代码如下所示

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

93

94

95

96

97

98

99

配套讲稿:

如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

特殊限制:

部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

关 键  词:
Python 爬虫 实战
提示  冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:Python爬虫实战.docx
链接地址:https://www.bdocx.com/doc/2165741.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2008-2022 冰点文档网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

收起
展开