urllib
- python中自带的一个基于爬虫的模块。 - 作用:可以使用代码模拟浏览器发起请求。 (含2个子模块 request parse) - 使用流程: - 指定url - 发起请求 - 获取页面数据 - 持久化存储
# 需求:爬取搜狗首页的页面数据 import urllib.request #1. 指定url (必须以字符串形式) url = 'https://www.sogou.com/' #2. 发起请求:urlopen 可以根据指定的url发起请求,且返回一个相应对象 response = urllib.request.urlopen(url=url) #3. 获取页面数据:read函数的返回值就是相应对象中存储的页面数据(bytes类型) page_text = response.read() #4. 持久化存储 with open('./sogou.html','wb')as fp: fp.write(page_text) print('写入数据成功')
# 需求: 爬起指定词条对应的页面数据 import urllib.request import urllib.parse #指定url url= 'https://www.sogou.com/web?query=' #url 特性:url不可以存在非ASCII编码的字符数据 word = urllib.parse.quote('周杰伦') #%E4%BA%BA%E6%B0%91%E5%B8%81 url += word #有效的url https://www.sogou.com/web?query=%E4%BA%BA%E6%B0%91%E5%B8%81 #发请求 response = urllib.request.urlopen(url=url) #获取页面数据 page_text = response.read() #持久化存储 with open('zhoujielun.html','wb') as fp: fp.write(page_text) print('done')
- 反爬机制:网站检查请求的UA,如果发现UA是爬虫程序,则拒绝提供网站数据
- User-Agent(UA):请求载体的身份标识。
- 反反爬机制:伪装爬虫程序的请求UA
import urllib.request url = 'http://www.baidu.com/' #UA伪装 #1 自定制一个请求对象,写成字典的格式 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' } request = urllib.request.Request(url=url, headers = headers) #2 针对自定制的请求对象发起请求 response = urllib.request.urlopen(request) page_text = response.read() with open('baidu.html','wb') as fp: fp.write(page_text)
urllib模块发起POST请求
-
需求 :爬取百度翻译的翻译结果 。知识点: 抓包工具network下的XHR是针对ajax请求的
import urllib.request import urllib.parse # 指定url url = 'https://fanyi.baidu.com/sug' #post请求携带的参数进行处理 流程: #1 将post请求参数封装到字典 data = { 'kw':'西瓜' } #2 使用parse模块中的urlencode(返回值类型为str)进行编码处理 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() #返回值是一个json字符串 with open('translate.html','wb') as f: f.write(page_text)
-