今天刚上手爬虫,当然要从最简单的开始啦,验证一下所学的知识
时间:2022-07-25
本文章向大家介绍今天刚上手爬虫,当然要从最简单的开始啦,验证一下所学的知识,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
很多免费的资源只能看但是不提供下载,今天我们以小说为例教你如何把互联网上只能看不能下载的东西给下载下来
知识点:
- requests
- css选择器
- 全站小说爬取思路
开发环境:
- 版 本:anaconda5.2.0(python3.6.5)
- 编辑器:pycharm 社区版
代码
导入工具
import requests
import parsel
请求头
headers = {
'User-Agent': 'gao fu shui'
}
请求数据
response = requests.get(chapter_url, headers=headers)
# 设置文本的编码为 utf-8
# response.encoding = 'utf-8'
# 万能解码 99%的情况下都是对的
# print(response.apparent_encoding) # requests 自动识别的编码
# print(response.encoding) # 服务直接我们的编码
response.encoding = response.apparent_encoding
# print(response)
html = response.text
# print(html)
# print(response.headers)
# # 响应体.请求体.请求头信息
# print(response.request.headers)
# # 查看源码 ctrl + 鼠标左键
# print(response.cookies)
解析数据
# css xpath
# parsel = css + xpath + re
# 把字符串变成可以解析的对象
selector = parsel.Selector(html)
# selector.css()
# selector.xpath()
# selector.re()
# get 获取对象里面的文字内容
# 属性提取器 attr
h1 = selector.css('.reader h1::text').get()
# print(h1)
content = selector.css('.showtxt::text').getall()
# print(content)
# # xpath 路径提取器
# h1 = selector.xpath('//h1/text()').get()
# print(h1)
# content = selector.xpath('//*[@class="showtxt"]//text()').getall()
# print(content)
# 去除每一个空白字符
# 定义一个空列表,留待备用 {}
lines = []
for c in content:
lines.append(c.strip())
print(h1)
# print(lines)
# str join 字符串的合并方法
text = 'n'.join(lines)
# print(text)
保存数据
file = open(book_name + '.txt', mode='a', encoding='utf-8')
file.write(h1)
file.write('n')
file.write(text)
file.write('n')
file.close()
获取所有章节的下载地址
# download_one_chapter('http://www.shuquge.com/txt/8659/2324752.html')
# download_one_chapter('http://www.shuquge.com/txt/8659/2324753.html')
# download_one_chapter('http://www.shuquge.com/txt/8659/2324754.html')
def download_one_book(index_url):
index_response = requests.get(index_url, headers=headers)
index_response.encoding = index_response.apparent_encoding
sel = parsel.Selector(index_response.text)
book_name = sel.css('h2::text').get()
# 提取了所有章节的下载地址
urls = sel.css('.listmain dl dd a::attr(href)').getall()
# 不要最新的 12 章放在最前main
for url in urls[12:]:
chapter_url = index_url[:-10] + url
print(chapter_url)
download_one_chapter(chapter_url, book_name)
# download_one_book('http://www.shuquge.com/txt/8659/index.html')
# download_one_book('http://www.shuquge.com/txt/5809/index.html')
# download_one_book('http://www.shuquge.com/txt/63542/index.html')
"""下载玄幻类的第一页"""
# 2_1.html 控制类别页数 可以for in 生产类别 for in 生产 页数
for cate in ['1', '2', '4']:
for page in range(1, 101):
cate_url = 'http://www.shuquge.com/category/' + cate + '_' + str(page) + '.html'
cate_response = requests.get(cate_url, headers=headers)
cate_response.encoding = cate_response.apparent_encoding
sel = parsel.Selector(cate_response.text)
# 提取了所有章节的下载地址
urls = sel.css('.l.bd > ul > li > span.s2 > a::attr(href)').getall()
# 不要最新的 12 章放在最前main
for url in urls:
print(url)
download_one_book(url)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android开发中Launcher3常见默认配置修改方法总结
- Android辅助功能实现自动抢红包(附源码)
- Android设置控件阴影的三种方法
- Android Studio 引入 aidl 文件的方法汇总
- Android 点击生成二维码功能实现代码
- Android屏幕手势检测的实现代码
- Android开发实现简单的观察者与被观察者示例
- Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】
- Android实现客户端语音动弹界面实例代码
- Android封装MVP实现登录注册功能
- Android5.1系统通过包名给应用开放系统权限的方法
- android 上传aar到私有maven服务器的示例
- Android Studio开发环境搭建教程详解
- android事件总线EventBus3.0使用方法详解
- Android仿淘口令复制弹出框功能(简答版)