今日目标:新笔趣阁的全部小说目录
爬取分析:暂无任何严重反爬
爬取思路:
- Step1:从base网页获取所有小说名字+小说链接
- Step2:请求小说链接,获得章节名+章节链接
- Step3:请求章节链接,获得小说内容
- Step4:根据小说名字创建文件,持久化保存小说内容
技术分析:
- 01:采用requests库,进行验证请求
- 02:文件读取操作需要用到os模块
- 03:解析文件使用xpath
- 04:验证爬取成功之后再改写为多线程爬虫
开始构建代码:
- 定义2个常用函数
import os
import requests
from lxml.html import etree
#请求函数
def get_html(link):
#伪造请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
'Referer': 'http://www.xbiquge.la/paihangbang/',
'Host': 'www.xbiquge.la'
}
#实例化session
session = requests.session()
#发起请求
res = session.get(url=link, headers=headers)
try:
if res.status_code == 200:
#避免网页乱码
res.encoding = 'utf-8'
#返回获取到的网页
return res.text
except requests.ConnectionError:
return None
#解析函数
def parse_html(html, xpath_bds):
'''
:param html: 目标网页
:param xpath_bds: xpath表达式
:return: 解析后的列表
'''
parse_html = etree.HTML(html)
result = parse_html.xpath(xpath_bds)
return result
- 构建爬虫文件
#自定义保存位置
PATH = r'G:\小说'+ os.path.sep + '{}.txt'
class BiquSpider:
def __init__(self):
self.base_url = 'http://www.xbiquge.la/xiaoshuodaquan/'
def get_article(self):
'''
:return: 返回格式为{文章名:文章链接}的字典
'''
html = get_html(self.base_url)
xpath_bds = '//div[@id="main"]/div[contains(@class,"novellist")]'
parsed_page = parse_html(html,xpath_bds)
for article in parsed_page:
# 小说名字列表
article_title_list = article.xpath('./ul/li/a/text()')
# 小说链接列表
article_link_list = article.xpath('./ul/li/a/@href')
return dict(zip(article_link_list,article_title_list))
def get_content(self