爬虫学习笔记
请求与响应
爬虫学习笔记
请求与响应
爬虫:crawler、网络机器人、网络蚂蚁、网络蜘蛛、spider
1. 通用爬虫 主要用于搜索引擎,谷歌、百度、360、搜狗、必应等等..... 目的在于尽可能多的搜集互联网上的高质量数据 优点:数量大且全 缺点:有价值的数据比较少,硬件成本太高。pagerank 2. 聚焦爬虫: 也成为主题爬虫(最常用的爬虫) 要按照预先设定好的主题,有选择性的进行网页爬取。 主要用于特定信息的获取。 优点:节省资源,数据价值较高。 3. 增量式爬虫 是一种特殊的聚焦爬虫,只采集更新后的数据 每次爬取只爬取更新后的页面(一天、一周、一月)
1
2
3
4
5
6
7
8
9
10
11
12
2. ## 协定约束
在首页/IP后面加上/robots.txt可以看到君子协定。
3. ## 库
```markdown
1. urllib 最基础的,python自带的一个http请求库
2. requests 基于urllib进行了封装,是一个第三方库 pip install requests
3. scrapy 协程级的异步框架4. scrapy-redis 基于scrapy和redis出现的分布式爬虫框架
5. aiohttp......HTTP的主要请求
1
2
3
4
5
61. GET请求:向服务器请求资源
get请求可以携带参数,参数携带方式以在url后面以问号拼接的形式携带
2. POST请求:向服务器请求资源
1. post请求可以携带参数,通过表单提交,post的请求的参数一般是加密的。
3. PUT请求:请求服务器存储一个资源
4. DELETE请求:请求服务器删除一个资源。爬虫程序思路
1. 发送get请求 res = requests.get() res.text 如果出现乱码,查找网页中的网页编码方式,进行解码在编码 res.content.decode() 2. 如何解析响应 1. 正则 2. BS 3. lxml 第三方类库,效率快,可以解析html和xml pip install lxml pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml 如何更新pip pip install --upgrade pip 可以使用xpath语法来获取数据 1. 基本语法: //:从根目录开始获取 @属性名:获取属性值 /表示从当前对象开始获取 []:筛选元素 2. 内置函数 text()
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
28
### 案例
```python
import requests
from lxml import etree
url = 'http://www.xbiquge.la/xiaoshuodaquan/'
res = requests.get(url=url)
ele = etree.HTML(res.text)
bookurl = ele.xpath("//div[@class='novellist']/ul/li/a/@href")
for url in bookurl:
res = requests.get(url=url)
txt = res.content.decode('utf-8')
ele = etree.HTML(txt)
content_url = ele.xpath("//div[@id='list']/dl/dd/a/@href")
for u in content_url:
res = requests.get(url = 'http://www.xbiquge.la'+u)
# pycharm的输出有长度限制,实际上正文已经获取到了,但是pycharm不显示
content = res.content.decode('utf-8')
ele = etree.HTML(content)
c = ele.xpath("//div[@id='content']/text()")
print(c)
s = ''
for cc in c:
s+= cc
s = s.strip()
with open('牧神记.txt','a+',encoding='utf-8') as w:
w.write(s+'\n'+'\n'+'\n')