pythonwhile爬虫教程_Python 爬虫从入门到进阶之路(十一)

之前的文章我们介绍了一下 Xpath 模块,接下来我们就利用 Xpath 模块爬取《糗事百科》的糗事。

之前我们已经利用 re 模块爬取过一次糗百,我们只需要在其基础上做一些修改就可以了,为了保证项目的完整性,我们重新再来一遍。

b29ccaf108d464b1dcffcfef9a06ef49.png

我们通过 Xpath Helper 的谷歌插件经过分析获取到我们想要的内容为: //div[@class="content"]/span[1]

9120cded375984b2bac3a46760f6bb75.png

然后我们就可以通过 text() 来获取里面的内容了, //div[@class="content"]/span[1]/text()

1 importurllib.request2 from lxml importetree3 importssl4

5 #取消代理验证

6 ssl._create_default_https_context =ssl._create_unverified_context7

8 url = "https://www.qiushibaike.com/text/page/1/"

9 #User-Agent头

10 user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'

11 headers = {'User-Agent': user_agent}12 req = urllib.request.Request(url, headers=headers)13 response =urllib.request.urlopen(req)14 #获取每页的HTML源码字符串

15 html = response.read().decode('utf-8')16 #解析html 为 HTML 文档

17 selector =etree.HTML(html)18 content_list = selector.xpath('//div[@class="content"]/span[1]/text()')19 print(content_list)

输出结果为:

1e160ea2a2bd7a9e18e63390fa79a8cd.png

从上面的输出结果可以看出我们已经拿到了我们想要的数据,并且是一个列表类型,我们对列表进行操作扥别拿到糗事再存储到本地即可。

1 for item initem_list:2 item = item.replace("\n", "")3 self.writePage(item)

上面的代码中 item_list 即为我们上面所获取到的 content_list 列表,在之前通过 re 模块获取数据时通过对列表的内容分析,我们发现有 ,查看全文,
,\n 等多余内容,而通过 Xpath 只有 \n 为多余,我们通过 replace 方法将其转为空,剩下的就是我们想要的内容了,接下来就是存储到本地即可了。

上面就可以实现一个获取 糗事百科 的糗事的简单爬虫,但是只能爬取单个页面的内容,通过分析 url 我们发现 https://www.qiushibaike.com/text/page/1/ 中最后的 1 即为页码,我们就可以根据这个页码逐一爬取更多页面的内容,最终的代码如下:

1 importurllib.request2 from lxml importetree3 importssl4

5 #取消代理验证

6 ssl._create_default_https_context =ssl._create_unverified_context7

8

9 classSpider:10 def __init__(self):11 #初始化起始页位置

12 self.page = 1

13 #爬取开关,如果为True继续爬取

14 self.switch =True15

16 defloadPage(self):17 """

18 作用:打开页面19 """

20 url = "https://www.qiushibaike.com/text/page/" + str(self.page) + "/"

21 #User-Agent头

22 user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36'

23 headers = {'User-Agent': user_agent}24 req = urllib.request.Request(url, headers=headers)25 response =urllib.request.urlopen(req)26 #获取每页的HTML源码字符串

27 html = response.read().decode('utf-8')28 #解析html 为 HTML 文档

29 selector =etree.HTML(html)30 content_list = selector.xpath('//div[@class="content"]/span[1]/text()')31 #调用dealPage() 处理糗事里的杂七杂八

32 self.dealPage(content_list)33

34 defdealPage(self, item_list):35 """

36 @brief 处理得到的糗事列表37 @param item_list 得到的糗事列表38 @param page 处理第几页39 """

40 for item initem_list:41 item = item.replace("\n", "")42 self.writePage(item)43

44 defwritePage(self, text):45 """

46 @brief 将数据追加写进文件中47 @param text 文件内容48 """

49 myFile = open("./qiushi.txt", 'a') #追加形式打开文件

50 myFile.write(text + "\n\n")51 myFile.close()52

53 defstartWork(self):54 """

55 控制爬虫运行56 """

57 #循环执行,直到 self.switch == False

58 whileself.switch:59 #用户确定爬取的次数

60 self.loadPage()61 command = input("如果继续爬取,请按回车(退出输入quit)")62 if command == "quit":63 #如果停止爬取,则输入 quit

64 self.switch =False65 #每次循环,page页码自增1

66 self.page += 1

67 print("爬取结束!")68

69

70 if __name__ == '__main__':71 #定义一个Spider对象

72 qiushiSpider =Spider()73 qiushiSpider.startWork()

最终会在本地添加一个 qiushi.txt 的文件,结果如下:

3d77b67fe6ff32903a717c33f174fcd5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值