python爬虫笔记

embedded/2025/1/16 18:26:59/

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')

详细代码如下:

python">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。

python">import urllib.request
import urllib.parse
import jsonbase_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.ppmy.cn/embedded/154450.html

相关文章

【CSS】 ---- CSS 实现图片随鼠标移动局部放大特效

1. 效果【京东商品放大特效】 2. 实现方法 2.1 JS 实现 创建原图片的盒子,并放入原图片;创建需要放大区域的遮罩块;创建显示放大后图片显示的盒子和盒子内放大的图片;给原图绑定移出移入和鼠标移动的监听事件;移入和…

【开源免费】基于SpringBoot+Vue.JS公司日常考勤系统(JAVA毕业设计)

本文项目编号 T 134 ,文末自助获取源码 \color{red}{T134,文末自助获取源码} T134,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

32单片机从入门到精通之测试与验证——单元测试(十五)

人生苦短,我们都会面临困难和挑战。但是,只要我们保持积极的心态和勇往直前的精神,我们就能战胜一切困难,实现自己的目标。 成功并不是一蹴而就的,它需要我们付出努力和坚持不懈。就像爬山一样,我们可能会遇…

什么是 DNS?DNS 的三种查询方式?

1. DNS是什么 DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器。 简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址。 域名是一…

PlantUML流程图语法学习实践

前言 PlantUML流程图在软件开发中具有多种用途,使用PlantUML生成的UML图表可以帮助审查者更快地理解代码的结构和逻辑;在AI发展的大环境中,可以借助plantUML语法生成的伪代码形式利用promt直接生成开发代码。 一、PlantUML PlantUML 是一款非…

Bash语言的语法糖

Bash语言的语法糖 Bash(Bourne Again SHell)是一种常用的Unix Shell,它为用户提供了一种命令行界面,用于与操作系统进行交互。虽然在功能上,Bash允许进行复杂的脚本编写、文件操作与系统管理,但是对于初学…

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的,大体上没有去做一些更新的东西,这里只是一个总的总结。在文章的最后,我会放上可以游玩该游戏的链接和exe可执行文件,不过没有对游戏内容进行什么加工,只有基本的功能实现罢了…

zerotier已配置但ip连不上?

利用zerotier内网渗透,在公网上远程连接使用局域网内的服务器,经常遇到连接不上的问题 zerotier配置过程 解决方法 声明:个人使用过程中,发现的有效解决方法,不一定能解决所有人的问题 总结: 重启Zerotier…