python爬虫笔记
urllib库的使用
GET请求
首先,获取网页源码需要模拟浏览器的访问行为对网页进行请求,即使用urllopen打开对应的请求,而请求需要定制一个请求对象,该对象需要统一资源定位器url和请求头headers进行构造,headers可查询浏览器数据,url可使用基础的url和查询参数字典的拼接实现。在这个过程中,data是需要使用parse.urlencode()方法进行编码的。
通过get请求爬取网页数据分为以下几步:
- 获取网页的url,如"http://www.baidu.com/s?"
- 获取请求头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={'wd':'北京'}
- 将data字典数据进行编码,使用urllib.parse.urlencode(data)进行拼接
- 直接拼接url字符串和data字典:url=url+data
- 定制请求对象:请求对象需要资源定位标识符url和headers请求头,通过urllib.request.Request(url=url,headers=headers)建立Request对象
- 利用Request对象进行查询:response=urllib.request.urlopen(request)
- 读取内容并解码,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)
原文地址:https://blog.csdn.net/2301_79335566/article/details/145156326
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!