【发布时间】:2017-10-24 07:15:00
【问题描述】:
我用 python 编写了一个脚本来从网页中抓取一些信息。该站点需要get 请求方法。我现在面临的问题是parameters 需要与url 合并,所以它应该是urlencoded。这就是我卡住的地方。我无法正确对其进行编码以获得有效响应。我试了一下,没有任何效果
我正在尝试的脚本:
import requests
import urllib.parse
fields ={
'/API/api/v1/Search/Properties/?f':'319 lizzie','ty':'2018','pvty':'2017','pn':'1','st':'9','so':'1','pt':'RP;PP;MH;NR','take':'20','skip':'0','page':'1','pageSize':'20'
}
payload = urllib.parse.quote_plus(fields, safe='', encoding=None, errors=None)
headers={
"User-Agent":"Mozilla/5.0"
}
page = requests.get("http://search.wcad.org/Proxy/APIProxy.ashx?", params=payload, headers=headers)
print(page.json())
上面的网址应该是这样的:
http://search.wcad.org/Proxy/APIProxy.ashx?/API/api/v1/Search/Properties/?f=319%20LIZZIE&ty=2018&pvty=2017&pn=1&st=9&so=1&pt=RP%3BPP%3BMH%3BNR&take=20&skip=0&page=1&pageSize=20
得到响应。
顺便说一句,这是我在现有脚本中遇到的错误:
Traceback (most recent call last):
File "C:\Users\ar\AppData\Local\Programs\Python\Python35-32\Social.py", line 9, in <module>
payload = urllib.parse.quote_plus(fields, safe='', encoding=None, errors=None)
File "C:\Users\ar\AppData\Local\Programs\Python\Python35-32\lib\urllib\parse.py", line 728, in quote_plus
string = quote(string, safe + space, encoding, errors)
File "C:\Users\ar\AppData\Local\Programs\Python\Python35-32\lib\urllib\parse.py", line 712, in quote
return quote_from_bytes(string, safe)
File "C:\Users\ar\AppData\Local\Programs\Python\Python35-32\lib\urllib\parse.py", line 737, in quote_from_bytes
raise TypeError("quote_from_bytes() expected bytes")
TypeError: quote_from_bytes() expected bytes
【问题讨论】:
-
你不需要手动连接你的参数。只需将字典放入
params。requests.get(url, params=<your params' dict>). -
@Sraw,我在发布这个问题之前首先做到了。事实上,我检查了
page.url以找出我的脚本产生的url。当我发现它产生了错误的网址时,我想出了上面的尝试。一切都在上面,所以请不要给出任何假设的解决方案。 -
只要给我们你想要的整个网址。
标签: python python-3.x web-scraping get urlencode