爬虫步骤
- 获取网页内容
- 解析网页内容
- 储存或分析数据
HTTP请求
-
请求方法
- GET方法——获得数据
- POST方法——创建数据
-
请求代码
-
# 请求行 # POST 资源路径+查询参数 请求协议 POST /user/info HTTP/1.1 # 请求头 # Host主机域名,完整网址=主机域名+资源路径+查询参数 # User-Agent客户端 # Accept接受类型:接受HTML-text/html;接受JSON-application/json;接受HTML和JSON--text/html,application/json;接受任意类型 “ */* Host:www.example.com User-Agent: curl/7.77.0 Accept: */* # 请求体 {"username":"林粒粒呀” "email": "linliliya@hotmail.com"}
-
-
响应代码
-
# 状态行 HTTP/1.1 200 0K #响应头 Date: Fri,27 Jan 2023 02:10:48 GMT Content-Type: text/html; charset=utf-8 #响应体 <!DOCTYPE html> <head><title>首页</title></head> <body><h1>林粒粒呀</h1><p>哈喽:</p></body> </html>
-
#状态码status code含义 200 OK //客户端请求成功 301 Moved Permanently // 资源被永久移动到新地址 400 Bad Request // 客户端不能被服务器所理解 401 Unauthorized // 请求未经授权 403 Forbidden // 服务器拒绝提供服务 404 Not Found // 请求资源不存在 500 Internal Server Error // 服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求
-
Python Requests库
-
安装
-
#终端输入 pip install requests
-
-
使用
-
import requests head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} response = requests.get("http://books.toscrape.com/", headers=head) print(response) print(response.status code) import requests response =requests.get("http://books.toscrape.com/") if response.ok: # 获取响应体内容 print(response.text) else: print("请求失败")
-
HTML
HTML教程-康文昌[^1]
Beautiful Soup解析库
-
pip install bs4
-
from bs4 import BeautifulSoup import requests content =requests.get("http://ww.example.com/").text soup = BeautifulSoup(content,"html.parser") # 找第一个p标签 p = soup.p print(p) # 找所有price_color类别的p标签 all_prices = soup.findAll("p",attrs={"class": "price_color"}) # 打印所有去掉前置1单位的price for price in all_prices print(price.string[1:])
实战豆瓣
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0...
}
for start_num in range(0,250,25):
response =requests.get(f"https://movie.douban.com/top250?start={start_num}"), headers=headers)
html = response.text
soup = BeautifulSoup(html,"html.parser")
all_titles = soup.findAll("span", attrs={"class": "title"})
for title in all titles:
title_string = title.string
if "/" not in title_string:
print(title_string)
正则表达式
复杂啊复杂。。。
多线程threading库
并没有仔细研究,倒是在pyside做了多线程
动态加载selenium库
selenium没用过,用的DrissionPage库