Python 检索到URL,无法构建有效负载以使用请求模块

Python 检索到URL,无法构建有效负载以使用请求模块,python,Python,我是Python新手,谢谢你的耐心 我使用请求模块检索了一个网页。我用美丽的汤收获了几百个href对象(链接)。我使用uritools为我要下载的目标页面创建了一个完整URL数组 我不想让每一个读到这篇文章的人都用请求轰炸web服务器,所以我将展示一个假设的示例,它只适用于2个HREF。该数组如下所示: hrefs2 = ['http://ku.edu/pls/WP040?PT001F01=910&pf7331=11', 'http://ku.edu/pls/WP040?PT001F0

我是Python新手,谢谢你的耐心

我使用请求模块检索了一个网页。我用美丽的汤收获了几百个href对象(链接)。我使用uritools为我要下载的目标页面创建了一个完整URL数组

我不想让每一个读到这篇文章的人都用请求轰炸web服务器,所以我将展示一个假设的示例,它只适用于2个HREF。该数组如下所示:

hrefs2 = ['http://ku.edu/pls/WP040?PT001F01=910&pf7331=11',
 'http://ku.edu/pls/WP040?PT001F01=910&pf7331=12']
如果我将这些输入到100行代码中,我就知道如何检索每页:

from lxml import html
import requests

url = 'http://ku.edu/pls/WP040/'
payload = {'PT001F01' : '910', 'pf7331' : '11')

r = requests.get(url, params = payload)
然后翻开第二页

payload = {'PT001F01' : '910', 'pf7331' : '12')
r = requests.get(url, params = payload)
并继续键入有效负载对象。并不是我处理的所有HREF都是顺序的,也不是所有的有效负载都在最后一个整数中不同

我想自动化这一点,但我不知道如何从hrefs2阵列创建有效负载

在摆弄uritools时,我发现
urisplit
可以为我提供需要解析为有效负载的部分:

   [urisplit(x)[3] for x in hrefs2] 

   ['PT001F01=910&pf7331=11',
     'PT001F01=910&pf7331=12']
每一个都必须变成一个有效载荷对象,我不知道该怎么办

我使用的是Python3,我使用的是uritools,因为这似乎是符合标准的urltools的替代品

我求助于shell脚本来获取带有
wget
的页面,这确实可行,但它太不符合Python风格了,我在这里想知道该怎么做。我的意思是,这确实有效:

import subprocess

for i in hrefs2:   
    subprocess.call(["wget", i])

您可以将完整url传递给requests.get(),而无需拆分参数

>>> requests.get('http://ku.edu/pls/WP040?PT001F01=910&pf7331=12')
<Response [200]>

你可以用更少的代码来做这件事,但我想弄清楚到底发生了什么。我确信已经有一个模块为您提供了这一功能。

我不明白为什么您不能使用
请求。获取
而不是在最后一段代码中对wget的子流程调用。你被困在哪里了?从requests.get的手册中,我想我需要在之后分离url的一部分?进入有效载荷。“我现在明白了,我错了,可以照你的建议去做。”丹尼尔·罗斯曼也提出了同样的建议。get.request将接受带有标志的完整URL。我误解了get.request()的说明
a = ['PT001F01=910&pf7331=11',
    'PT001F01=910&pf7331=12']
# list to store all url parameters after they're converted to dicts
urldata = []

#iterate over list of params
for param in a:
  data = {}
  # split the string into key value pairs
  for kv in param.split('&'):
    # split the pairs up
    b = kv.split('=')
    # first part is the key, second is the value
    data[b[0]] = b[1]
  # After converting every kv pair in the parameter, add the result to a list.
  urldata.append(data)