第一篇爬虫——爬取一本小说

目录

一、爬取第一章​

1.引入requests 和 parsel库

2.代码实现步骤: 

(1).发送请求

(2).获取数据

(3).解析数据

提取章节名 

使用 css 获取小说标题,粘贴:

使用 xpath 也可以获取小说标题

提取小说内容

​(4).保存数据

二、爬取整本小说


一、爬取第一章​

1.引入requests 和 parsel库

import requests
import parsel

如果requests 和 parsel报错,单击requests再按Alt+Enter,Install package requests。

单击parsel再按Alt+Enter,Install package parsel。

依然报错可以使用pip命令安装requests和parsel模块

pip install requests

pip install parsel

可以查看Python中安装了哪些第三方库

pip list

2.代码实现步骤: 


(1).发送请求,对于刚刚分析得到的url地址发送请求
(2).获取数据,获收服务器返回的response响应数据
(3).解析数据,提取我们想要的数据内容小说章节名字以及小说内容
(4).保存数据,把提取出来的内容保存到本地

(1).发送请求

小说第一章导航栏地址:

用response变量接收返回的内容

url = 'http://www.ibiquge.cc/19666/5687111.html'
response= requests.get(url) # <Response[200]>返回response响应对象,200表示请求成功
print(response)

(2).获取数据

print(response.text)

(3).解析数据

提取章节名 

进入开发者模式:F12,再依次点击:

使用 css 获取小说标题,粘贴:

selector = parsel.Selector(response.text)
novel_title = selector.css('.content h1 ::text').get()
print(novel_title)

使用 xpath 也可以获取小说标题
novel_title = selector.xpath('//*[@class="content"]/h1/text()').get()

 

提取小说内容

小说内容比较多,使用getall

novel_content = selector.css('#content::text').getall()
print(novel_content)

保存数据时不能直接对列表数据进行保存,所以把列表转换成字符串数据。

使用 \n 换行

novel_content_list = selector.css('#content::text').getall()
novel_content = '\n'.join(novel_content_list)


(4).保存数据

w写入数据但是覆盖,a写入追加写入,写入文件末尾,b二进制模式。保存文字一定要指定编码,这里用的UTF-8。

with open(novel_title + '.txt', mode='w', encoding='utf-8') as f:
    f.write(novel_content)

有一个问题:小说里面没有章节名。 

删除第一章的txt文件,换成以下代码:

with open(novel_title + '.txt', mode='a', encoding='utf-8') as f:
    f.write(novel_title)
    f.write('\n')
    f.write(novel_content)
    f.write('\n')

二、爬取整本小说

爬一章需要一个url,只要获取所有的章节网址就可以爬取一本了。

返回目录页

import re

设置user-agent可以模拟不同的客户端跟服务器通信,这样可以避免服务器屏蔽我们的爬虫。 

url = 'http://www.ibiquge.cc/19666/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'}
response = requests.get(url, headers)

爬取小说所有章节

novel_name = re.findall('<h1>(.*?)</h1>', response.text)[0]
novel_info = re.findall('<dd><a href ="(.*?)">(.*?)</a></dd>', response.text)
print(novel_name)
for novel_url, novel_title in novel_info:
    novel_url = 'http://www.ibiquge.cc' + novel_url
    response = requests.get(novel_url, headers)
    selector = parsel.Selector(response.text)
    novel_content_list = selector.css('#content::text').getall()
    novel_content = '\n'.join(novel_content_list)
    with open(novel_name + '.txt', mode='a', encoding='utf-8') as f:
        f.write(novel_title)
        f.write('\n')
        f.write(novel_content)
        f.write('\n')
    print('正在保存', novel_title)

整本小说

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值