我想用python写一个小的代码来每天检查包裹。在网页(https://www.internationalparceltracking.com/#/search中进行查询时,URL不变,因此无法通过URL发送查询。我尝试使用beautifulsoup和urllib,但无法获得回报。
在这里,我尝试了什么:
import requests
from bs4 import BeautifulSoup
url = 'https://www.internationalparceltracking.com/#/search'
html = urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")
r = requests.post(url=url, data={'placeholder':'3SABC1234567890'})
print(r.text)
最后,我不想使用硒(例如打开其他浏览器),查询是在地下进行的... 我正在等待您的建议
答案 0 :(得分:2)
我转到了您发布的网址。我在表单中填写了一些虚拟数据,打开了Chrome开发者控制台->网络标签,并能够发现传出的GET请求:
curl 'https://www.internationalparceltracking.com/api/shipment?barcode=OEIOEWJOE4WO4UOI4O43U34&checkIfValid=true&country=US&language=en&postalCode=94107' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Accept: application/json, text/plain, */*' -H 'Referer: https://www.internationalparceltracking.com/' -H 'Cookie: ROUTEID=route.2; TIN-Language=en; Ely_vID=vk51m7caca6fj45lhcauwgj67rg1cvsj' -H 'Connection: keep-alive' --compressed
鉴于此,我认为下面的代码可以(不必抓取):
import requests
payload = {
'barcode': '3SABC1234567890',
'country': 'US',
'postalCode': 11111,
'language': 'en',
'checkIfValid': True
}
url = 'https://www.internationalparceltracking.com/api/shipment'
r = requests.get(url, params=payload)
print r.contents
答案 1 :(得分:1)
如果您查看浏览器的网络检查器(例如,在chrome上为Ctrl + shift + i),您会看到该网页正在对这样的页面进行简单的ajax请求:
现在只需将关键字参数值替换为您自己的值即可!
url = "https://www.internationalparceltracking.com/api/shipment?barcode={code}&checkIfValid=true&country={country}&language=en"
import requests
my_code = '12345'
my_country = 'US'
response = requests.get(url.format(code=my_code,country=my_country)
print(response.json())
答案 2 :(得分:1)
@FelizNaveedad提供的功能非常好。只是为了更清楚地说明这张图片
您可以按照以下路径进行操作:Chrome开发者控制台->网络标签-> XHR。并在网页上手动发布信息,然后您将在XHR上看到一些文件。您要查找的是从装运开始的文件。...
单击该文件,您将找到查询字符串参数。那就是您发布到浏览器并将其复制为代码作为参数的内容。
如果您想更具体地了解它,可以观看video,我认为它很有帮助。