php网页抓取工具(本节继续讲解Python爬虫实战案例(图:抓取*敏*感*词*))

优采云 发布时间: 2021-12-14 22:28

  php网页抓取工具(本节继续讲解Python爬虫实战案例(图:抓取*敏*感*词*))

  本节继续讲解Python爬虫的实际案例:爬取*敏*感*词*()页面,如Python爬虫栏、编程栏,只爬取贴吧的前5页。在本节中,我们将使用面向对象的编程方法来编写程序。

  确定页面类型

  通过简单分析可知,待抓取的*敏*感*词*页面为静态网页。分析方法很简单:打开*敏*感*词*,搜索“Python爬虫”,将出现的页面任意一段复制信息,如“爬虫需要http代理的原因”,然后右击选择查看源代码,使用Ctrl+F快捷键在源代码页搜索刚才复制的数据,如下图:

  

  图1:静态网页分析判断(点击查看高清图片)

  从上图可以看出,页面中的所有信息都收录在源页面中,不需要从数据库单独加载数据,所以页面是静态页面。

  查找 URL 更改模式

  接下来,查找要抓取的页面的URL规则。搜索“Python爬虫”后,贴吧的第一页网址如下:

  爬虫&fr=搜索

  点击第二页,其url信息如下:

  爬虫&ie=utf-8&pn=50

  点击第三页,url信息如下:

  爬虫&ie=utf-8&pn=100

  再次点击第一页,url信息如下:

  爬虫&ie=utf-8&pn=0

  如果您不确定,可以继续浏览更多页面。最后你发现url有两个查询参数kw和pn,pn参数有规律,如下图:

  第n页:pn=(n-1)*50

#参数params

pn=(page-1)*50

params={

         'kw':name,

         'pn':str(pn)

        }

  url地址可以简写为:

  爬虫(&pn)=450

  编写爬虫

  下面以类的形式编写爬虫程序,在类下编写不同的功能函数。代码如下:

  

1. from urllib import request,parse

2. import time

3. import random

4. from ua_info import ua_list #使用自定义的ua池

6. #定义一个爬虫类

7. class TiebaSpider(object):

8. #初始化url属性

9. def __init__(self):

10. self.url='http://tieba.baidu.com/f?{}'

12. # 1.请求函数,得到页面,传统三步

13. def get_html(self,url):

14. req=request.Request(url=url,headers={'User-Agent':random.choice(ua_list)})

15. res=request.urlopen(req)

16. #windows会存在乱码问题,需要使用 gbk解码,并使用ignore忽略不能处理的字节

17. #linux不会存在上述问题,可以直接使用decode('utf-8')解码

18. html=res.read().decode("gbk","ignore")

19. return html

20. # 2.解析函数,此处代码暂时省略,还没介绍解析模块

21. def parse_html(self):

22. pass

23. # 3.保存文件函数

24. def save_html(self,filename,html):

25. with open(filename,'w') as f:

26. f.write(html)

27. # 4.入口函数

28. def run(self):

29. name=input('输入贴吧名:')

30. begin=int(input('输入起始页:'))

31. stop=int(input('输入终止页:'))

32. # +1 操作保证能够取到整数

33. for page in range(begin,stop+1):

34. pn=(page-1)*50

35. params={

36. 'kw':name,

37. 'pn':str(pn)

38. }

39. #拼接URL地址

40. params=parse.urlencode(params)

41. url=self.url.format(params)

42. #发请求

43. html=self.get_html(url)

44. #定义路径

45. filename='{}-{}页.html'.format(name,page)

46. self.save_html(filename,html)

47. #提示

48. print('第%d页抓取成功'%page)

49. #每爬取一个页面随机休眠1-2秒钟的时间

50. time.sleep(random.randint(1,2))

51. #以脚本的形式启动爬虫

52. if __name__=='__main__':

53. start=time.time()

54. spider=TiebaSpider() #实例化一个对象spider

55. spider.run() #调用入口函数

56. end=time.time()

57. #查看程序执行时间

58. print('执行时间:%.2f'%(end-start)) #爬虫执行时间

  程序执行后,抓取到的文件会保存到Pycharm的当前工作目录下,输出为:

  输入贴吧名:python爬虫

输入起始页:1

输入终止页:2

第1页抓取成功

第2页抓取成功

执行时间:12.25

  用面向对象的方法写爬虫程序的时候,思路简单,逻辑清晰,很容易理解。上面的代码主要收录四个功能函数,分别负责不同的功能。总结如下:

  1) 请求函数

  request函数的最终结果是返回一个HTML对象,方便后续函数调用。

  2) 解析函数

  解析函数用于解析 HTML 页面。常用的解析模块有正则解析模块和bs4解析模块。通过对页面的分析,提取出需要的数据,在后续的内容中会详细介绍。

  3) 保存数据功能

  该函数负责将抓取到的数据保存到数据库中,如MySQL、MongoDB等,或以文件格式保存,如csv、txt、excel等。

  4) 入口函数

  入口函数作为整个爬虫程序的桥梁,通过调用不同的函数函数实现数据的最终抓取。入口函数的主要任务是组织数据,比如要搜索的贴吧名称,编码url参数,拼接url地址,定义文件保存路径。最后,如果你的时间不是很紧,又想快速提高python,最重要的是不怕吃苦,我建议你可以群:[832357663],那真的很好,很多人进步很快,你需要你 不怕吃苦!大家可以去补充看看~

  履带结构

  用面向对象的方法写爬虫程序时,逻辑结构比较固定,总结如下:

  

1. # 程序结构

2. class xxxSpider(object):

3. def __init__(self):

4. # 定义常用变量,比如url或计数变量等

6. def get_html(self):

7. # 获取响应内容函数,使用随机User-Agent

9. def parse_html(self):

10. # 使用正则表达式来解析页面,提取数据

12. def write_html(self):

13. # 将提取的数据按要求保存,csv、MySQL数据库等

15. def run(self):

16. # 主函数,用来控制整体逻辑

18. if __name__ == '__main__':

19. # 程序开始运行时间

20. spider = xxxSpider()

21. spider.run()

  注:掌握以上编程逻辑有助于后续学习。

  爬虫随机休眠

  在入口函数代码中,收录如下代码:

  

1. #每爬取一个页面随机休眠1-2秒钟的时间

2. time.sleep(random.randint(1,2))

  爬虫程序访问网站的速度非常快,与正常的人类点击行为非常不符。因此,爬虫程序可以通过随机休眠来模仿人类。点击网站,这样网站不容易检测到爬虫访问了网站,但这样做的代价是影响程序的执行效率。在学习Python的道路上,我们经常会遇到很多问题,我们的问题放在一起不是问题。可以在编辑中找到关一达一起学习,也可以私信“01”获取学习干货,遇到什么问题也可以及时向编辑提问。

  聚焦爬虫是一种执行效率低的程序。提高其性能是业界一直关注的问题。由此,一个更高效的 Python 爬虫框架 Scrapy 诞生了。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线