urllib模块基本用法

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)

       

转载于:https://www.cnblogs.com/lys666/p/10477684.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 `urllib.request.ProxyHandler` 类来为 `urllib` 模块设置代理,并且如果代理需要身份验证,您可以使用 `urllib.request.HTTPPasswordMgrWithDefaultRealm` 类来提供代理的用户名和密码。 以下是一个示例代码,演示如何使用代理和身份验证进行请求: ```python import urllib.request # 代理服务器的地址和端口 proxy_address = 'http://proxy.example.com:8080' # 代理服务器需要身份验证的用户名和密码 proxy_username = 'your_username' proxy_password = 'your_password' # 创建一个密码管理器 password_manager = urllib.request.HTTPPasswordMgrWithDefaultRealm() password_manager.add_password(None, proxy_address, proxy_username, proxy_password) # 创建一个代理处理器 proxy_handler = urllib.request.ProxyHandler({'http': proxy_address}) # 创建一个自定义的 opener opener = urllib.request.build_opener(proxy_handler, urllib.request.HTTPBasicAuthHandler(password_manager)) # 使用 opener 发起请求 response = opener.open('http://www.example.com') print(response.read()) ``` 在上述示例中,`proxy_address` 变量设置了代理服务器的地址和端口。`proxy_username` 和 `proxy_password` 变量设置了代理服务器的身份验证信息。您可以根据实际情况修改这些变量的值。 请注意,上述示例中使用了 `urllib.request.build_opener()` 函数创建了一个自定义的 opener,该 opener 可以处理代理和身份验证。然后,使用该 opener 的 `open()` 方法发起请求并获取响应。 希望这可以帮助到您!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值