自学内容网 自学内容网

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)


原文地址:https://blog.csdn.net/2301_79335566/article/details/145156326

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!