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))
如果觉得对入门有帮助,麻烦来个一键三连点个赞!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渊季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值