Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理请求时面临URL编码问题_Python_Python 3.x_Web Scraping_Get_Urlencode - Fatal编程技术网

Python 处理请求时面临URL编码问题

Python 处理请求时面临URL编码问题,python,python-3.x,web-scraping,get,urlencode,Python,Python 3.x,Web Scraping,Get,Urlencode,我已经用python编写了一个脚本来从网页中获取一些信息。该站点需要get请求方法。我现在面临的问题是,由于需要将参数与url合并,所以应该正确地对其进行url编码。这就是我被困的地方。我无法正确地对其进行编码以获得有效的响应。我试了一下,但没有带来任何好处 我尝试使用的脚本: import requests import urllib.parse fields ={ '/API/api/v1/Search/Properties/?f':'319 lizzie','ty':'2018','pv

我已经用python编写了一个脚本来从网页中获取一些信息。该站点需要get请求方法。我现在面临的问题是,由于需要将参数与url合并,所以应该正确地对其进行url编码。这就是我被困的地方。我无法正确地对其进行编码以获得有效的响应。我试了一下,但没有带来任何好处

我尝试使用的脚本:

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())
上述URL应如下所示:

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
这很有效。正如所指出的,不需要自己进行任何URL编码

关键是查询字符串从最后一个问号开始,而不是从第一个问号开始。在URL中包含第二个问号是必须的,因为请求只会在没有问号的情况下添加一个问号

import requests

url = "http://search.wcad.org/Proxy/APIProxy.ashx?/API/api/v1/Search/Properties/?"
params = {'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'}

response = requests.get(url, params)

response.json()
导致

{ 'ResultList': [{ 'PropertyQuickRefID': 'R016698', 'PartyQuickRefID': 'O0485204', 'OwnerQuickRefID': 'R016698', 'LegacyID': None, 'PropertyNumber': 'R-13-0410-0620-50000', 'OwnerName': 'GOOCH, PHILIP L', 'SitusAddress': '319 LIZZIE ST, TAYLOR, TX 76574', 'PropertyValue': 46785.0, 'LegalDescription': 'DOAK ADDITION, BLOCK 62, LOT 5', 'NeighborhoodCode': 'T541', 'Abstract': None, 'Subdivision': 'S3564 - Doak Addition', 'PropertyType': 'Real', 'ID': 0, 'Text': None, 'TaxYear': 2018, 'PropertyValueTaxYear': 2017 }], 'HasMoreData': False, 'TotalPageCount': 1, 'CurrentPage': 1, 'RecordCount': 1, 'SearchText': '319 lizzie', 'PagingHandledByCaller': False, 'TaxYear': 2018, 'PropertyValueTaxYear': 0 }
您无需手动连接参数。把字典放进params里就行了。requests.geturl,params=@Sraw,我在发布这个问题之前就做了。事实上,我使用page.url检查了脚本生成的url。当我发现它生成了错误的url时,我想出了上面的方法。所有内容都在上面,所以请不要给出任何假设的解决方案。只需给我们你想要的全部url。我很不高兴我无法将你的解决方案提高数百万次。这确实是一种极大的解脱。多谢了。