Python的四个爬虫基础库
一、底层的爬虫库——Urllib
urllib
是一个爬虫入门学习的一个库;也相当于第一个必学了解的库;
使用方法如下:
# 创建请求对象并且构建headers
urllib.request.Request()
# 获取响应对象
urllib.request.urlopen()
# 读取响应对象当中的内容
response.read()
实例代码:
import urllib.request
import urllib.parse
base_url = 'https://tieba.baidu.com/f?'
# https://tieba.baidu.com/f?kw=%E7%81%AB%E5%BD%B1%E5%BF%8D%E8%80%85&ie=utf-8&pn=100
conten = '火影忍者' # input('请输入想搜索的内容:')
page = 0
kw = {'kw': conten, 'pn': page}
key = urllib.parse.urlencode(kw)
url = base_url + key
print(url)
# 创建请求对象
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.46'
}
req = urllib.request.Request(url, headers=headers)
# 获取响应对象
res = urllib.request.urlopen(req)
# 读取响应对象内容
html = res.read().decode('utf-8')
print(html)
# 保存文件
with open(f'{conten}1.html', 'w', encoding='utf-8') as f:
f.write(html)
使用 Urllib 需要先构造好请求体,通过构造好的请求体发起请求,最后获取响应体,再读取结果;
二、小白入门易上手的爬虫库——Autoscraper
Autoscraper 这个库非常适合没有接触过爬虫编程的新手,因为这个库不需要对于 Xpath 与 CSS 语法有过多的了解,只需要有一份 HTML 源码作为参考,将需要的参数 给程序举出一个参数例子,代码会通过匹配文本相似度进行只能爬虫,因此 Autoscraper 也算是一个智能的爬虫了;但是数据的匹配也是有缺点的,不适合要求数据精准度高的大佬使用。
下面来介绍这个库的使用方法:
一、需要先构造模板:
scraper = AutoScraper()
scraper.build(url=url, wanted_dict=wanted_dict)
# 这里的模板支持url 以及 html 两种方法;
# 其中 匹配模板支持单字段与多字段两种模式:wanted_list、wanted_dict
# 单子段:
wanted_list = ["东大桥东里 南向一居室 采光充足,配套完善"]
# 多字段:
wanted_dict= {
"title": ["东大桥东里 南向一居室 采光充足,配套完善"],
"topic": ["1室1厅 | 36.23平米 | 南 | 精装 | 顶层(共6层) | 1983年建 | 板楼"],
"times": ["49人关注 / 15天以前发布"]
}
# 并且支持精准度构造方式:text_fuzz_ratio
模板构造方式:
比如 链家这个网站:https://bj.lianjia.com/ershoufang/
如图 内 圈出的 参数所示:
若要抓取的参数是这些,因为他们的排版一致,因此我们只需要复制出第一组参数就可以构造出需要的模板了;默认的匹配度为100%,因此若无特殊情况需要完整参数构造内容如下:
wanted_dict= {
"title": ["东大桥东里 南向一居室 采光充足,配套完善"],
"topic": ["1室1厅 | 36.23平米 | 南 | 精装 | 顶层(共6层) | 1983年建 | 板楼"],
"times": ["49人关注 / 15天以前发布"]
}
有了可以匹配的模板后就可以使用 Autoscraper
库抓取数据了;
完整代码实例如下:
from autoscraper import AutoScraper
url = 'https://bj.lianjia.com/ershoufang/'
wanted_list = {
"title": ["东大桥东里 南向一居室 采光充足,配套完善"],
"topic": ["1室1厅 | 36.23平米 | 南 | 精装 | 顶层(共6层) | 1983年建 | 板楼"],
"times": ["49人关注 / 15天以前发布"]
}
scraper = AutoScraper()
scraper.build(url=url, wanted_dict=wanted_list)
result = scraper.get_result_similar(url=url, grouped=True)
print(result)
result = scraper.get_result_similar(url="https://bj.lianjia.com/ershoufang/pg3/", grouped=True)
print(result)
抓取结果如下:
Autoscraper 库既可以当作爬虫库使用,也可以当作数据解析的一个库使用;
测试代码时,一定要注意网站数据与你构造的模板是否一致!!!
三、常用的爬虫库——Requests
Requests 是一个使用最多的一个爬虫库;使用的方法也 简单。
实例代码如下:
import requests
base_url = 'https://tieba.baidu.com/f'
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'
}
# 请求参数
kw = (
('kw', '\u706B\u5F71\u5FCD\u8005'),
('ie', 'utf-8'),
('pn', '50'),
('pagelets', 'frs-list/pagelet/thread'),
('pagelets_stamp', '1643547938876'),
)
response = requests.get(url=base_url, params=kw, headers=headers)
print(response.text)
四、支持异步与Http2.0协议的爬虫库——Httpx
Httpx 这个库支持异步操作爬取,并且也支持 http2.0 版本协议的网络请求
基本操作与 Requests 类似,这里只演示 2.0 的爬虫请求方式;
案例网站:https://spa16.scrape.center/
代码实例:
import httpx
client = httpx.Client(http2=True, verify=False)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55',
}
response = client.get('https://spa16.scrape.center/api/book/?limit=18&offset=18', headers=headers)
print(response)
print(response.json())
这个网站如果使用 requests 访问就会出现异常报错:
requests.exceptions.ConnectionError: (‘Connection aborted.’, ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。’, None, 10054, None))
如果觉得对入门有帮助,麻烦来个一键三连点个赞!!