urllib模块基本用法

Urllib是python内置的HTTP请求库
包括以下模块
urllib.request 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块- python中自带的一个基于爬虫的模块。
- 使用流程: - 指定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)
复制代码
 

  

posted @ 2020-10-13 22:56  遥月  阅读(282)  评论(0)    收藏  举报