官方数据:起点中文网越来越火爆了,我利用Python直接把整站数据采集完毕
优采云 发布时间: 2020-09-05 04:05起点中文网站越来越受欢迎,我使用Python直接完成整个网站数据采集
注意:PEP 20是著名的Python Zen。
警告:非专业使用其他HTTP库可能导致危险的副作用,包括:安全缺陷,冗余代码综合症,重塑车轮综合症,文件咬伤综合症,沮丧,头痛甚至死亡。
2.功能
据说请求功能强大,那么让我们看一下请求的功能:
请求完全满足当今网络的需求。请求支持Python 2. 6- 2. 7和3. 3- 3. 7,并且可以在PyPy下完美运行
三、安装请求
pip安装请求
如果是pip3,则使用
pip3安装请求
如果您使用水蟒,则可以
conda安装请求
如果您不想使用命令行,则可以在pycharm中下载类似的库
四、采集器进程
下图是Brother Pig先前工作总结的项目开发过程。它很详细。确实有必要如此详细地开发大型项目。否则,项目将失败或修改需求。程序员有可能牺牲自己的生命。 。
靠近主题,向所有人显示项目的开发过程将导致爬网数据的过程:
确定需要爬网的Web浏览器。检查数据源(静态网页或动态加载)以查找加载数据URL(例如分页)代码模拟请求以爬网数据的参数规律
起点中文网成立于2002年5月。它是中国最大的文学阅读和写作平台之一。它是领先的原创文学门户网站,属于China-Reading集团下最大的综合数字内容平台。
总体思路分为三个步骤:
1.分析网页结构,使用xpath表达式对所有文章名称和链接进行爬网,然后按文章名称生成文件夹。
import requests
from urllib import request
from lxml import etree
import os
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
class Spider(object):
def start_request(self):
url = 'https://www.qidian.com/all'
req = request.Request(url,headers=header)
html= request.urlopen(req).read().decode('utf-8')
html=etree.HTML(html)
bigtit_list=html.xpath('//div[@class="book-mid-info"]/h4/a/text()') ##爬取所有的文章名字
bigsrc_list = html.xpath('//div[@class="book-mid-info"]/h4/a/@href')
print(bigtit_list)
print(bigsrc_list)
for bigtit,bigsrc in zip(bigtit_list,bigsrc_list):
if os.path.exists(bigtit)==False:
os.mkdir(bigtit)
self.file_data(bigsrc,bigtit)
2.使用文章链接抓取每个章节的名称和链接
def file_data(self,bigsrc,bigtit): #详情页
url="http:"+bigsrc
req = request.Request(url, headers=header)
html = request.urlopen(req).read().decode('utf-8')
html = etree.HTML(html)
print(html)
Lit_tit_list = html.xpath('//ul[@class="cf"]/li/a/text()') #爬取每个章节名字
Lit_href_list = html.xpath('//ul[@class="cf"]/li/a/@href') #每个章节链接
for tit,src in zip(Lit_tit_list,Lit_href_list):
self.finally_file(tit,src,bigtit)
3.使用每个章节的链接来生成带有章节名称的txt文件,并将其保存到每个文章文件夹中。
def finally_file(self,tit,src,bigtit):
url = "http:" + src
req = request.Request(url, headers=header)
html = request.urlopen(req).read().decode('utf-8')
html = etree.HTML(html)
text_list = html.xpath('//div[@class="read-content j_readContent"]/p/text()')
text = "\n".join(text_list)
file_name = bigtit + "\\" + tit + ".txt"
print("正在抓取文章:" + file_name)
with open(file_name, 'a', encoding="utf-8") as f:
f.write(text)
spider=Spider()
spider.start_request()
成功!
生成的文件夹如下所示: