一个简单的爬虫
from urllib.request import urlopen
url = "http://www.xxx.com"
resp = urlopen(url) # 打开一个网址,得到一个响应
# resp.read() # 读取内容
with open("xxx.html", mode="w", encoding="utf-8")as f:
f.write(resp.read().decode("utf-8")) # 读取到网页的页面源码
print("over")
web请求过程
有些网页直接在html中加载数据,可以直接爬取;但有些网页是通过请求json格式的数据拿到,不方便直接获取内容
1.服务器渲染:在服务器端把数据和html整合在一起,统一返回给浏览器,在页面源代码能看到
2.客户端渲染:第一次请求只请求一个html框架,第二次请求拿到数据进行展示,但在页面源代码中看不到
http
请求: 1.请求行————请求方式(get/post),请求url地址,协议
2.请求头————放服务器要使用的附加信息
3.请求体————放请求参数
响应: 1.请求行————协议 状态码(200 404 500 302...)
2.响应头————放客户端要使用的附加信息
3.响应体————服务器返回客户端要使用的内容(json等)
requests
import requests
qry = input("输入想要搜索的名称: ")
url = f'https://xxx.com/web?query={qry}'
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"}
resp = requests.get(url, headers=head) # 处理反爬
print(resp)
print(resp.text) # 拿到页面源代码
resp.close() # 关闭请求
--------------------------------------------------------------------------------------------------------------------------------
import requests
url = 'https://fanyi.xxx.com/sug'
s = input("请输入要翻译的单词:")
d = {"kw": s}
resp = requests.post(url, data=d)
print(resp.json()) # 将服务器返回的内容处理成json()
resp.close()
--------------------------------------------------------------------------------------------------------------------------------
import requests
#url = 'https://movie.xxx.com/j/chart/top_list?type=24&interval_id=100:90&action=&start=0&limit=20'
#可以进行拆分
url = 'https://movie.xxx.com/j/chart/top_list'
#?type=24&interval_id=100:90&action=&start=0&limit=20
#重新封装参数
param = {
"type": "24",
"interval_id": "100:90",
"action": "",
"start": 0,
"limit": 20
}
head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"}
resp = requests.get(url, params=param, headers=head)
print(resp.request.url)
print(resp.json())
resp.close()