from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
# print(resp.read().decode("utf-8"))#读取内容 编码方式头几行可以看到
#保存到本地文件中
with open("mybaidu.html",mode="w",encoding="utf-8") as f:
f.write(resp.read().decode("utf-8"))
print("over!")
上述网站没有反扒机制
WEB请求
服务端渲染
在页面源代码可以看到数据
客户端渲染
在页面源代码看不到数据,但第二次请求有数据,我们可以通过浏览器抓包工具找到数据
Http协议
request入门
安装requests库
用命令pip install requests比较快
如果嫌网速下载太慢,可以换源下载,去百度搜索 pip清华源
get
import requests
url="https://www.sogou.com/sie?query=周杰伦"
# resp = requests.get(url)
# print(resp)#响应码
# print(resp.text)#拿到页面源代码
# #但是该网站有反扒机制,需要进一步处理,加入请求头
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.9 Safari/537.36"
}
resp = requests.get(url,headers=headers)
print(resp)#响应码
print(resp.text)#拿到页面源代码
post
import requests
url="https://fanyi.baidu.com/sug"
s=input("请输入你要翻译的单词")
#字典,搜索关键词
dat={
"kw" : s
}
#发送post请求,发送的数据直接放到字典中,通过data参数进行传递
resp=requests.post(url,data=dat)
print(resp.json())#将服务器返回的内容直接处理成json
客户端类型
import requests
#客户端服务器类型
url="https://movie.douban.com/j/chart/top_list"
#重新封装参数
param={
"type": "24",
"interval_id": "100:90",
"action": "",
"start": "0",
"limit": "20"
}
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.9 Safari/537.36"
}
resp=requests.get(url=url,params=param,headers=headers)
print(resp.request.url)
print(resp.json())#若没有数据,则被反扒了
resp.close()#关闭resp
总结:
爬取一个网站,首先查看这个网站是客户端类型还是服务器端类型,然后在浏览器中查看请求方式,如果初步爬取不到数据,则该网站有反扒机制,则需要进行处理
如果想学习更多的话,我推荐下面这个课程