介绍:爬取《牧神记》小说,牧神记这部小说是我近年读到比较优秀的小说,从小说第一章开始到现在一千多章,可以看到作者的文笔越来越成熟,可能是这种像看着主人公成长的感觉一直吸引着我,期待作者可以有更多优秀的作品呈现给大家。话不多说,赶紧开始:
首先我们对每篇小说进行分析,右键检查,发现文章的内容放在novelcontent内的 p节点中,这下问题就简单了,beautifulsoup解析页面获得data,获取标题data.title.string, 再回到网页,检查元素,找到novelcontent的父节点content_novel和novelbody,利用data.select获取内容,返回text格式,这样我们就轻松获得了文章的内容:
section_text = data.select('#novelbody .content_novel #novelcontent p')[0].text
清除text不需要的符号,规范格式:
section_text=re.sub( '\s+', '\r\n\t', section_text).strip('\r\n')
解决了文章获取的问题,剩下来的问题就简单了,思路就是解析目录,获得当前目录页中每一章的地址,爬取这个地址的内容,直到爬取完当前目录页后,再获取目录页下一页的地址,直到爬取完成。
代码主要分为三部分:
第一部分:爬取文章内容
方法:
- 利用beautifulsoup解析网页内容
- 将text写入txt文件
- 将文件命名为章节名字,并保存
第二部分:获取下一页地址
方法:
- pyquery解析网页
- 获取标签为"下一页"指向的next_url
- 下一页url = http://m.biquyun + next_url
第三部分:获取目录页的所有文章的url
方法:
- pyquery解析网页
- 获取标签包含“第”指向的url (小说一般叫第XX章 XXX)
- 获取每一页url
* coding:utf-8 *
import time
from pyquery import PyQuery as pq
import re
from bs4 import BeautifulSoup
import requests
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Cookie': 'UM_distinctid=162f5f44f0113-0313b684ffd29e-5e4c2719-100200-162f5f44f05116; __jsluid=d26199ff490223142ead3dca3b417f0d; PHPSESSID=rcqhhvqkvd9ggs9mqarotu54n7; CNZZDATA1272873895=1502087634-1524539933-null%7C1524545333',
'Host': 'm.biquge.tw',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App leWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53'
}
url = "http://m.biquyun/6_6595_1_1//"
def get_book(url): #获取内容
file=requests.get(url,params=headers)
data=BeautifulSoup(file.text,"html.parser")
bookname = data.title.string
section_text = data.select('#novelbody .content_novel #novelcontent p')[0].text
section_text=re.sub( '\s+', '\r\n\t', section_text).strip('\r\n')
fo = open(bookname+'.txt', "ab+") #打开小说文件
fo.write(('\r' + bookname + '\r\n').encode('UTF-8'))
fo.write((section_text).encode('UTF-8'))
fo.close() #关闭小说文件
def change_page(url):
data = pq(url)
nextpage = data('a:contains(下一页)')
return (nextpage.attr('href'))
def get_page(url):
data = pq(url)
li = data('a:contains(第)')
for a in li.items():
get_book('http://m.biquyun'+a.attr('href'))
print(a.text())
# time.sleep(2)
if __name__ == '__main__':
while(True): #循环,直到结束
get_page(url)
url = "http://m.biquyun"+change_page(url)
print(time.clock())
更多推荐
爬取牧神记小说
发布评论