关于在python中重定向从网页抓取和提取数据

时间:2014-12-30 10:02:27

标签: python redirect web-crawler

[http://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber?execution=e1s1]

例如跟踪号:LM920347139CN,
我想提取曲目历史数据,但是使用重定向 所以如何弄清楚,如果有任何方法来获取不包含表示逻辑的数据

会更好

1 个答案:

答案 0 :(得分:1)

修改

显然有可用于跟踪的REST和SOAP API。见http://www.canadapost.ca/cpo/mc/business/productsservices/developers/services/tracking/default.jsf


最简单的(非API)方式可能是使用mechanize模块,您可以从PyPI获取该模块。您可以像使用Web浏览器一样使用它。它将遵循重定向,并根据此特定网站的要求管理任何cookie。例如:

import mechanize

br = mechanize.Browser()
url = 'http://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber'
response = br.open(url)
br.select_form('tapByTrackSearch:trackSearch')
br.form['tapByTrackSearch:trackSearch:trackNumbers'] = 'LM920347139CN'
response = br.submit()
html = response.read()

如果您更喜欢使用requests,或者如果您需要支持Python 3,requests也会遵循重定向并根据需要管理Cookie

import requests

s = requests.Session()
url = 'http://www.canadapost.ca/cpotools/apps/track/personal/findByTrackNumber'
response = s.get(url)

但是,使用requests,您需要设置所需的POST表单字段(我在此处未显示)。

获得HTML后,您可以使用BeautifulSoup等HTML解析器来处理和提取所需的数据。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
tracking_table = soup.find(id='tapListResultForm:table_2')
.
.
.

您可以从中提取跟踪数据。