python爬取小说

最近学了些爬虫的知识,于是想用来练练手,思来想去,下个小说吧,也是可以下好了可以看看解解闷。

那么第一步,百度搜索,这样的网站应该很多,直接搜索小说的名字就好了。  随便点开一个,url有了。

和简单的爬虫不同的是,我们第一步要获取各个章节的url链接。 

右键点击查看源代码,就可以查看到相同的内容了,这个html形式的内容我们也不需要了解太多,只要搜索发现各个章节的链接在哪就可以了。

这里我发现各个章节的链接是在class = ‘chapter’目录下的,于是,尝试写写代码来获取这个章节链接。

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
headers = {
    'User-Agent':UserAgent().chrome
}
url = 'https://www.pilokibook.com/0/19009/'
#链接作了修改,可以自行查找
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
chapters_url = soup.find_all('ul', class_='chapters')
soup_chaprers = BeautifulSoup(str(chapters_url), 'lxml')
urls = soup_chaprers.find_all('a')
for url in urls:
    print(url.get('href'))

requests库是用来发送请求的,fake_useragent库用来模拟请求头,Beautiful_soup用来提取链接。于是在最后,我们就获得了各个章节的链接。对大部分网站而言,链接是相对该网页而言的,使用时还需要补全。有了这个链接,我们就可以获取章节的内容了。随便点开一个章节,查看其源代码。 

  很显然,类似的工作。对于各个章节的链接,正文都在class=novelcontent中。既然这样,继续就是了。

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
headers = {
    'User-Agent':UserAgent().chrome
}
url = 'https://www.pifflibook.com/0/199/2044378.html'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
content = soup.find_all('div', id='novelcontent')
soup_content = BeautifulSoup(str(content), 'lxml')
text = soup_content.find_all('p')
print(text)

 得到的text就是需要的正文了,但是发现格式有点奇怪,没关系,稍微修改一下,就可以了

text1 = str(text)
text2 = text1.replace('[<p>[</p>, <p>一', '\n  ')
text3 = text2.replace('</p>, <p>', '\n  ')
text4 = text3.replace('</p>]', '')
with open('rerer.txt','a',encoding='utf-8') as f:
    f.write(text4)

稍稍整理一下思路,通过小说主页面得到章节链接,在通过章节链接获取相应的正文,再写入到文
件中就可以了。使用一个循环吧,主要的内容都有了,也不开线程了,不写函数和类方法了,就直接爬取吧。 

import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
import time
a = time.time()
headers = {
    'User-Agent':UserAgent().chrome
}
url = 'https://www.pilibookkk.com/0/19999/'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')
chapters_url = soup.find_all('ul', class_='chapters')
soup_chaprers = BeautifulSoup(str(chapters_url), 'lxml')
urls = soup_chaprers.find_all('a')
# 获取网页源代码
chapters_urls = []

for url in urls:
    chapters_urls.append(url.get('href'))
# 将章节链接获取到chapters_urls
with open('人生海海.txt', 'a', encoding='utf-8') as f:
    for chapternum in range(len(chapters_urls)):
        response = requests.get(chapters_urls[chapternum], headers=headers)
        soup = BeautifulSoup(response.text, 'lxml')
        content = soup.find_all('div',class_='novelcontent')
        soup_content = BeautifulSoup(str(content), 'lxml')
        text = soup_content.find_all('p')
        # 获取书籍正文
        text1 = str(text)
        text2 = text1.replace('[<p>[</p>, <p>一', '\n  ')
        text3 = text2.replace('</p>, <p>', '\n  ')
        text4 = text3.replace('</p>]', '')
        text5 = text4.replace('[<p>[', '')
        f.write('第{}章'.format(chapternum + 1))
        f.write('\n')
        f.write(text5)
        f.write('\n\n')
        # 写入到文件中
        print('已下载{}'.format((chapternum + 1)/len(chapters_urls)))
b = time.time()

print('下载完成')
print('用时{}'.format(b-a))

 进行了一点点的格式修改,运行结果也挺满意:  

           

大概 洗个手的时间吧,就下好了。

看了下别的小说,大体思路不变,都是可以下载的!

有问题欢迎来交流哦

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值