Python爬取小说


Python爬取网络小说实战。

前言

在搭建好Python爬虫的环境后,接下来开始Python做爬虫的实战!

一、requests的用法

1.1 request.get的用法

首先给出爬取豆瓣的一个示例程序:

1
2
3
4
import requests
response = requests.get('https://www.douban.com')
response.encoding = 'utf-8'
print(response.text)

在上述示例程序中第二行,requests.get除了直接获取网址外,还可以加入参数,使用方法:
1
requests.get(url, para)

接下来给出带参数访问的示例程序:
1
2
3
4
5
6
7
8
9
10
import requests
dict = {'q':'java'} # 传递的参数,构造在豆瓣中搜索java时的网址
# dict = {'q':'java', 'cat':1001} # 构造两个参数,在豆瓣的书籍中搜索java
# dict = {'user':'colainlibrary','password':'1234'}
response = requests.get('https://www.douban.com', params = dict)
response = requests.post("https://www.douban.com/login", data = dict)

response.encoding = 'utf-8'
print(response.url)
print(response.text)

1.2 requests.post的用法

requests.post可以用来模拟登录。

1
2
3
4
5
6
import requests
dict = {'user':'riyueguanghua','password':'12345678'}
response = requests.post('https://www.douban.com/', data = dict)
print(response.status_code)
print(response.text)
# 返回值表示HTTP状态码,2字头表示请求已被服务器接收、理解并接受,3字头表示重定向,4字头代表客户端看起来发生了错误,5/6字头表示服务器在处理的过程中有错误或者异常状态发生。

1.3 定制请求头

定制请求头,模拟浏览器,反爬虫。因为很多网站会通过请求的头部来判断是否为机器人。cookies上传的时候需要以字典的形式上传。

二、爬取小说

本节内容的学习参考零基础教学:python爬取小说网站所有小说!

2.1 爬取一章小说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import requests
from parsel import Selector
response = requests.get('http://www.xbiquge.la/10/10489/4535761.html')
response.encoding = response.apparent_encoding
# xpath css选择器 提取网页数据结构(html)
sel = Selector(response.text)
# pip install parsel
# 打开文件 创建文件
title = sel.css('h1::text').get()
# 定义f为打开的文件对象
f = open(title + '.txt', mode = 'w', encoding = 'utf-8')
# print(sel.css('#content::text'),getall())
f.write(title)
for line in sel.css('#content::text').getall():
print(line.strip(), file = f)
f.close()

2.2 爬取一本小说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
from parsel import Selector
def download_one_chapter(chapter_url):
response = requests.get(chapter_url)
response.encoding = response.apparent_encoding
# xpath css选择器 提取网页数据结构(html)
sel = Selector(response.text)
# pip install parsel
# 打开文件 创建文件
title = sel.css('h1::text').get()
# 定义f为打开的文件对象,w是覆盖,a是添加,可以实现整本小说写在一个txt里
f = open(title + '.txt', mode = 'w', encoding = 'utf-8')
# print(sel.css('#content::text'),getall())
f.write(title)
for line in sel.css('#content::text').getall():
print(line.strip(), file = f)
f.close

# 请求索引页的数据
response = requests.get('http://www.xbiquge.la/10/10489/')
response.encoding = response.apparent_encoding
sel = Selector(response.text)
index = sel.css('#list a::attr(href)').getall()
#print(index) # 获取所有的章节链接后缀
for line in index:
print('http://www.xbiquge.la'+line) # 获取所有章节链接
download_one_chapter('http://www.xbiquge.la'+line) # 爬取所有章节
------ 本文结束感谢您的阅读------
Donate a cup of cola?