爬虫之urllib模块
2024-08-30 23:49:48
1. urllib模块介绍
- python自带的一个基于爬虫的模块。
- 作用:可以使用代码模拟浏览器发起请求。
- 经常使用到的子模块:request,parse。
- 使用流程:
- 指定URL。
- 针对指定的URL发起了一个请求。
- 获取页面数据。
- 持久化储存。
2. 爬取搜狗首页的页面数据
# 需求:爬取搜狗首页的页面数据
import urllib.request # 1. 指定url
url = 'https://www.sogou.com/' # 2. 发起请求:urlopen可以根据指定的url发起请求,且返回一个响应对象(byte类型)
response = urllib.request.urlopen(url) # 3. 获取页面数据:read函数返回的就是响应对象中存储的页面数据
page_text = response.read() # 4. 持久化存储
with open('./sougou.html','wb') as fp:
fp.write(page_text)
print('写入数据成功')
3. 爬取指定词条所对应的页面数据
import urllib.request
import urllib.parse # 1. 指定url
url = 'https://www.sogou.com/web?query=' # url特性:url不可以存在非ASCII编码的字符数据
word = urllib.parse.quote('人民币')
url += word # 有效的url # 2. 发起请求
response = urllib.request.urlopen(url=url) # 3. 获取页面数据
page_text = response.read()
with open('rmb.html','wb') as fp:
fp.write(page_text)
4.反爬和反反爬
- 反爬机制:网站检查请求的UA,如果发现UA是爬虫程序,则拒绝提供网站数据。
- User-Agent(UA):请求载体的身份标识,正常是浏览器。
- 反反爬机制:伪装爬虫程序请求的UA,例如伪装成谷歌浏览器或火狐浏览器的身份标识。
mport urllib.request url = 'https://www.baidu.com/' # UA伪装
# 1. 自制定一个请求对象
headers = {
# 存储任意的请求头信息
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
# 该请求对象的UA进行了成功的伪装
request = urllib.request.Request(url=url,headers=headers) # 2. 针对自制定的请求对象发起请求
reponse = urllib.request.urlopen(request) print(reponse.read())
5. post请求
import json
import urllib.request
import urllib.parse # 一、 指定URL
url = 'https://fanyi.baidu.com/sug' # 对post请求携带的参数进行处理。流程:
# 1. 将请求参数封装到字典中
data = {
'kw':'西瓜'
} # 2. 使用parse中的urlencode进行编码处理
data = urllib.parse.urlencode(data) # 3. 将步骤2的编码结果转换成byte类型
data = data.encode() # 二、发起post请求:urlopen函数的data参数表示的就是经过处理之后的post请求携带的参数
response = urllib.request.urlopen(url=url,data=data) page_text = response.read() with open('translate.json','ab') as fp:
fp.write(page_text)
最新文章
- BZOJ 1799 同类分布
- 随部分div增高总的div也随着增高
- 犀牛书的实例代码:给对象添加freeze, hide, 查询descriptors
- repeater单双行颜色不同,gridview repeater DataList 鼠标经过改变背景颜色
- FlyCapture2 Qt5 MinGW Configuration
- linux扩大swap交换空间
- poj 1144 Network(无向图求割顶数)
- Windows Azure存储容器私有,公共容器,公共Blob的区别
- 全国省市级联数据sql语句 mysql版
- php url字符转义操作
- 【POJ2186】受牛仰慕的牛
- javascript 常用api
- [SignalR2] 认证和授权
- ServletRegistrationBean的源码摘要
- CodeForces #549 Div.2 C Queen
- JAVA程序设计的第一次作业
- pycharm License server激活
- [转] 浅析JavaScript设计模式——发布-订阅/观察者模式
- JS设计模式——单例模式剖析
- Oracle.ManagedDataAccess 提示ORA-01017 错误【解决方案】