爬虫课程笔记01
原创
©著作权归作者所有:来自51CTO博客作者计算机控制挖掘机炒菜?的原创作品,请联系作者获取转载授权,否则将追究法律责任
1、第一个爬虫程序
# 爬虫:通过编写程序来获取到互联网上的资源
# 百度
# 需求:用程序模拟浏览器.输入一个网址,从该网址中获取到资源或者内容
# python搞定以上需求
from urllib.request import urlopen
# url = 'http://www.baidu.com'
url = 'https://www.cnblogs.com/liunaixu/'
resp = urlopen(url)
with open("files/bokeyuan.html",mode='w',encoding='utf-8') as f:
f.write(resp.read().decode())
print('over!')
乱码的解决:decode('utf-8')会造成乱码,所以加入encoding='utf-8'才能解决。
2、web请求过程
1)服务器渲染:在服务器那边直接把数据和html整合在一起,统一返回给浏览器。 特点:在页面源代码中能看到数据
2)客户端渲染:第一次请求只要一个html骨架,第二次请求拿到数据.进行数据展示。 特点:在页面源代码中,看不到数据。
3、http协议
4、requests模块
安装:requests模块
pip install requests
国内网速快的情况下:使用清华源 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
5、get请求
# 使用搜狗浏览器搜索明星的get请求
import requests
query = input('请输入一个你喜欢的明星:')
url = f'https://www.sogou.com/web?query={query}'
# url = 'https://www.sogou.com/web?query=%E5%8D%95%E7%94%B0%E8%8A%B3'
dic = {'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'}
resp = requests.get(url,headers=dic) # 处理一个反爬
# resp = requests.get(url) # 处理一个反爬
print(resp)
print(resp.text) # 拿到页面源码
执行结果:
请输入一个你喜欢的明星:周杰伦
<Response [200]>
...var oldQuery="周杰伦",
...
<a href="http://map.sogou.com/#lq=周杰伦"
...
name="query" value="周杰伦"> <input type="hidden"
...
7zOM=_-63072914&htdbg=on">乐坛谁比周杰伦地位高</a>
...
3072914&htdbg=on">周杰伦最好听的10首歌</a>
...
6、post请求
# 使用百度翻译的post请求
import requests
url = 'https://fanyi.baidu.com/sug'
s = input('请输入你要翻译的英文单词:')
dic = {'kw':s}
# 发送post请求,发送的数据必须放在字典中,通过data参数进行传递
resp = requests.post(url,data=dic)
# print(resp.text) # 会出现乱码
# 将服务器返回的内容直接处理成json的dict格式
print(resp.json())
请输入你要翻译的英文单词:dog
{'errno': 0, 'data': [{'k': 'dog', 'v': 'n. 狗; 蹩脚货; 丑女人; 卑鄙小人 v. 困扰; 跟踪'}, {'k': 'DOG', 'v': 'abbr. Data Output Gate 数据输出门'}, {'k': 'doge', 'v': 'n. 共和国总督'}, {'k': 'dogm', 'v': 'abbr. dogmatic 教条的; 独断的; dogmatism 教条主义; dogmatist'}, {'k': 'Dogo', 'v': '[地名] [马里、尼日尔、乍得] 多戈; [地名] [韩国] 道高'}]}
7、爬虫的步骤
import requests
from time import sleep
# 爬虫:豆瓣网》排行榜》喜剧
# 步骤分解
# 1、地址。
url = 'https://movie.douban.com/j/chart/top_list'
# 2、参数。当url后面跟着的参数很多时,重新封装参数
param = {
'type': '24',
'interval_id': '100:90',
'action': '',
'start': 0,
'limit': 20
}
# 6、修改headers
headers = {
'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'
}
# 3、发送请求。7、添加headers
resp = requests.get(url=url,params=param,headers=headers)
# 输出请求的连接地址,与F12的标头》请求网址一样
# print(resp.request.url)
# 4、爬取结果。如果没有打印出任何结果,情况可能是被反爬了.8、爬取结果
# print(resp.text)
# 5、分析。尝试查看headers,user-agent的结果是'python-requests/2.24.0'
# print(resp.request.headers)
# {'User-Agent': 'python-requests/2.24.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
# 9、json处理
print(resp.json())
# 10、等待5秒后关闭爬取请求
sleep(5)
resp.close()