5.4 综合案例2-------爬取起点中文网小说信息

本节将利用Requests和Lxml第三方库,爬取起点中文小说信息,并存储到Excel文件中。

5.4.1 将数据存储到Excel文件中

使用Python的第三方库xlwt,可将数据写入Excel中,通过pip进行安装即可:

pip3 install xlwt

执行结果如下图所示。

通过下面的代码,便可将数据写入Excel中:

import xlwt         #将数据写入Excel的库文件中
book = xlwt.Workbook(encoding='utf-8')   #创建工作簿
sheet = book.add_sheet('Sheet1')   #创建工作表
sheet.write(0,0,'python')          #在相应单元格写入数据
sheet.write(1,1,'love')
book.save('test.xls')             #保存到文件中

程序运行后,可在本地找到该Excel文件,结果如图所示。

代码说明如下:

⑴导入xlwt库。

⑵通过Workbook()方法创建一个工作簿。

⑶创建一个名字为Sheet1的工作表。

⑷写入数据,可以看出第一个和第二个参数为Excel表格的单元格位置,第三个为写入内容。

⑸保存到文件中。

5.4.2 爬虫思路分析

⑴爬取的内容为起点中文网的全部作品信息(http://a.qidian.com/),如下图所示。

 

⑵爬取起点中文网的全部作品信息的前100页,通过手动浏览,下面为第2页的网址:

https://www.qidian.com/all?orderId=&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=0&page=2

猜想这些字段是用来控制作品分类的,我们爬取的为全部作品,依次删掉一些参数检查,发现将网址改为https://www.qidian.com/all?page=2后,也可以访问相同的信息,通过多页检验,证明了修改的合理性,以此来构造前100页URL

⑶需要爬取的信息有:小说名、作者ID、小说类型、完成情况、摘要和字数,如下图所示。

⑷运用xlwt库,把爬取的信息存储到本地的Excel表格中。

5.4.3 爬虫代码分析:

 1 import xlwt
 2 import requests
 3 from lxml import etree
 4 import time                     #导入相应的库文件
 5 
 6 all_info_list = []              #初始化列表,存入爬虫数据
 7 
 8 def get_info(url):              #定义获取爬虫信息的函数
 9     html = requests.get(url)
10     selector = etree.HTML(html.text)
11     infos = selector.xpath('//ul[@class="all-img-list cf"]/li')   #定位大标签,以此循环
12 
13     for info in infos:
14         title = info.xpath('div[2]/h4/a/text()')[0]
15         author = info.xpath('div[2]/p[1]/a[1]/text()')[0]
16         style_1 = info.xpath('div[2]/p[1]/a[2]/text()')[0]
17         style_2 = info.xpath('div[2]/p[1]/a[3]/text()')[0]
18         style = style_1+'·'+style_2
19         complete = info.xpath('div[2]/p[1]/span/text()')[0]
20         introduce = info.xpath('div[2]/p[2]/text()')[0].strip()
21         word = info.xpath('div[2]/p[3]/span/text()')[0].strip('万字')
22         info_list = [title,author,style,complete,introduce,word]
23         all_info_list.append(info_list)     #把数据存入列表
24     time.sleep(1)                           #睡眠1秒
25 
26 if __name__ == '__main__':       #程序主入口
27     urls = ['https://www.qidian.com/all?page={}'.format(str(i)) for i in range(1,29655)]
28     for url in urls:
29         get_info(url)
30     header = ['title','author','style','complete','introduce','word']   #定义表头
31 
32     book = xlwt.Workbook(encoding='utf-8')  #创建工作簿
33     sheet = book.add_sheet('Sheet1')  #创建工资表
34     for h in range(len(header)):
35         sheet.write(0, h, header[h])     #写入表头
36     i = 1
37     for list in all_info_list:
38         j = 0
39         for data in list:
40             sheet.write(i, j,data)
41             j += 1
42         i += 1                       #写入爬虫数据
43 book.save('xiaoshuo.xls')           #保存文件

代码分析:

⑴第1~4行导入程序所需要的库,xlwt用于写入数据到Excel文件中,requests库用于请求网页,lxml库用于解析提取数据,time库的sleep()方法可以让程序暂停。

⑵第6行定义了all_info_list列表,用于存储爬取的数据。

⑶第8~24行定义获取爬虫信息的函数,用于获取小说信息,并把小说信息以列表的形式存储到all_info_list列表中。

注意:列表中有列表,这样存储是为了方便写入Excel中。

⑷第26~43行为函数主入口,构造前100页URL,依次调用函数获取小说信息,最后把信息写入Excel文件中。

程序运行后,将会存入数据倒Excel表格中,如图所示。

 

posted @ 2019-07-10 14:46  taoziya  阅读(728)  评论(0)    收藏  举报