当前位置: 首页 > article >正文

python爬虫笔记

urllib库的使用

GET请求

首先,获取网页源码需要模拟浏览器的访问行为对网页进行请求,即使用urllopen打开对应的请求,而请求需要定制一个请求对象,该对象需要统一资源定位器url和请求头headers进行构造,headers可查询浏览器数据,url可使用基础的url和查询参数字典的拼接实现。在这个过程中,data是需要使用parse.urlencode()方法进行编码的。

通过get请求爬取网页数据分为以下几步:

  1. 获取网页的url,如"http://www.baidu.com/s?"
  2. 获取请求头headers,如{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"}
  3. 获取所需的查询关键字,如查询“北京”,应当以字典形式或字符串拼接形式输入,如data={'wd':'北京'}
  4. 将data字典数据进行编码,使用urllib.parse.urlencode(data)进行拼接
  5. 直接拼接url字符串和data字典:url=url+data
  6. 定制请求对象:请求对象需要资源定位标识符url和headers请求头,通过urllib.request.Request(url=url,headers=headers)建立Request对象
  7. 利用Request对象进行查询:response=urllib.request.urlopen(request)
  8. 读取内容并解码,content=response.read().decode('utf-8')

详细代码如下:

import urllib.request
import urllib.parse

'''
——————request
 |-url
 |-headers
 |-quote
'''

#Base URL
url='http://www.baidu.com/s?'

#User Agent
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
}

#Unicode form of the quote
data={
    'wd':'北京',
    'time':'2025'#this parameter is just showing what should we do is parameters is better than one
}
new_data=urllib.parse.urlencode(data)
url=url+new_data

#Make a request object
request=urllib.request.Request(url=url,headers=headers)

#Simulate the brower send request to the server
response = urllib.request.urlopen(request)

#Get the html code from response page
content = response.read().decode('utf-8')

print(content)

POST请求

post请求需要用户提供参数,发送参数进行查询,而不能直接将编码后的data和url进行拼接。

下面以百度翻译为例进行展示,首先,需要将data进一步编码为utf-8格式,然后使用这一data构造请求对象Request。由于返回的是json数据,需要将string进一步转换为json。

import urllib.request
import urllib.parse
import json

base_url='https://fanyi.baidu.com/sug'
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0",
}
data={
    'kw':'prior'
}

#Post (Must be encoded)
new_data=urllib.parse.urlencode(data).encode('utf-8')

#args of post should put in the Request constructor
request=urllib.request.Request(url=base_url,data=new_data,headers=headers)
response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')

obj=json.loads(content)
print(obj)


http://www.kler.cn/a/507042.html

相关文章:

  • linux系统监视(centos 7)
  • windows11下 podman-desktop 复制插件文件 到 RabbitMQ 容器内,并启用
  • 使用jupyter notebook没有正常打开浏览器的几种情况解决
  • Jmeter配置服务代理器 Proxy(二)
  • ​​​​​​​​​​​​​​★3.3 事件处理
  • C++ 并发编程之std::find的并发版本
  • 当PHP遇上区块链:一场奇妙的技术之旅
  • 【Python】使用python 对excel文件进行加密
  • 基于SpringCloud的广告系统设计与实现(一)
  • vscode 切换文件时,修改内容时很卡,怎么解决?
  • No.33 笔记 | Docker入门:基础概念与实用指南
  • wordpress的火车头商品发布接口
  • iOS面试模版
  • 赤店商城系统点餐小程序多门店分销APP共享股东h5源码saas账号独立版全插件全开源
  • 学习threejs,使用OrbitControls相机控制器
  • STM32的集成开发环境STM32CubeIDE安装
  • spark,读取和写入同一张表问题
  • 掌握 TypeScript 的 `Omit` 工具类型:灵活操作对象属性的艺术
  • [Qt]常用控件介绍-布局管理器-QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout、QSpace控件
  • AI实验室copilot自动化科研,AMD联手约翰霍普金斯大学:成本节约84%!
  • 【JVM-6】JVM 监控工具 jstat 的使用和具体应用案例
  • 【区间DP】【hard】力扣730. 统计不同回文子序列
  • css3网格布局
  • JavaEE:多线程初阶
  • shell安全类脚本(1.屏蔽每分钟访问过多的IP;2.拒绝ssh暴力破解)
  • MySQL基本知识梳理