Python requests+beautifulsoup爬虫从入门到精通(第一天)
想要用Python爬虫?从这里入手!
首先,我们得安装以下工具
requests——获取网站信息
beautifulsoup4、re(Python自带)——解析网站信息
要安装包,总少不了这个:
pip install requests beautifulsoup4
快抄代码啊!!!
然后,也少不了这个:
import requests
import re
from bs4 import BeautifulSoup
快抄代码啊!!!x2
然后,就正式开始爬虫了
requests里有一个函数——get
get网站数据
还有一个post,但我们常用get
具体区别戳下面【Python数据采集系列】一文解读requests.get()和requests.post()的区别_requests.post requests.get-CSDN博客
首先,我们来理解一下get各主要参数用法
def get(
url: str | bytes,
params: _Params | None = None,
*,
data: _Data | None = ...,
headers: _HeadersMapping | None = ...,
cookies: RequestsCookieJar | _TextMapping | None = ...,
files: _Files | None = ...,
auth: _Auth | None = ...,
timeout: _Timeout | None = ...,
allow_redirects: bool = ...,
proxies: _TextMapping | None = ...,
hooks: _HooksInput | None = ...,
stream: bool | None = ...,
verify: _Verify | None = ...,
cert: _Cert | None = ...,
json: Incomplete | None = ...,
) -> Response: ...
url:自己理解
timeout:超时时间
verify:链接是否安全
header:请求头
cookie:一种小型文本文件,记录了一些信息
请求头咋写?
对呀,请求头咋写???啥意思啊?
请求头是一个字典
浏览器请求网站页面时有请求头
浏览器打开网页,右键->检查(或者直接按F12)->网络(network)->ctrl+e->ctrl+r->随便点一个
我们主要还是使用这个user-agent,伪装成浏览器绕过某些网站的反爬限制
例如b站
错误代码:
import requests
reponse = requests.get('https://www.bilibili.com')
print(reponse.status_code)
reponse.status_code:状态码,状态码类型详见HTTP 状态码 | 菜鸟教程
输出:412
4开头的状态码, 根据上面的网址是这样说明的
原来是哔哩哔哩没给我们条件
但加个请求头就不一样了
正确代码:
import requests
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 Edg/103.0.1264.44'}
reponse = requests.get('https://www.bilibili.com',headers=header)
print(reponse.status_code)
不要自己写请求头啊,直接从浏览器复制
输出200,成功了
现在我们说说reponse的各种方法
headers和url:你觉得呢
encoding:编码
text:网页HTML代码
cookies:你觉得呢
其他就没啥了,不太常用
我们将他们一一输出
import requests
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36 Edg/103.0.1264.44'}
reponse = requests.get('https://www.bilibili.com',headers=header)
print(reponse.status_code)
print(reponse.text)
print(reponse.encoding)
print(reponse.url)
print(reponse.headers)
print(reponse.cookies)
D:\Program\Python\python.exe C:\Users\west5\AppData\Roaming\JetBrains\PyCharm2024.3\scratches\scratch.py
200
<!DOCTYPE html>
<html lang="zh-CN" class="gray">
...
</html>
utf-8
https://www.bilibili.com/
{'Date': 'Wed, 29 Jan 2025 13:23:00 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'support': 'nantianmen', 'Set-Cookie': 'buvid3=77401650-778A-6AA8-CB5E-8641B919083880678infoc; path=/; expires=Thu, 29 Jan 2026 13:23:00 GMT; domain=.bilibili.com, b_nut=1738156980; path=/; expires=Thu, 29 Jan 2026 13:23:00 GMT; domain=.bilibili.com', 'server-timing': 'render;dur=96,total;dur=115', 'Vary': 'Origin,Accept-Encoding', 'Content-Encoding': 'gzip', 'Expires': 'Wed, 29 Jan 2025 13:22:59 GMT', 'Cache-Control': 'no-cache', 'X-Cache-Webcdn': 'BYPASS from blzone04'}
<RequestsCookieJar[<Cookie buvid3=77401650-778A-6AA8-CB5E-8641B919083880678infoc for .bilibili.com/>, <Cookie b_nut=1738156980 for .bilibili.com/>]>
(…把中间的HTML代码省掉了,实际会输出,只是我觉得太占地方了)
好了,今天先学习到这里,明天继续
大年初一,放飞着玩,别闭关修炼了!
Be continued
作者:LightingLong