更改python mechanize中的链接

时间:2014-05-15 11:53:25

标签: python web-scraping mechanize mechanize-python

我正在尝试编写一个python脚本,它将生成我的批次的排名列表。为此,我只需要使用Web浏览器中的inspect element功能更改链接的roll-number参数。链接(相对)看起来像:

/academic/utility/AcademicRecord.jsp?loginCode=000&loginnumber=000&loginName=name&Home=ascwebsite

我只需要更改loginCode以获得我的批处理伙伴的等级。我试图使用python迭代所有滚动数字并生成排名列表。我使用mechanize库来使用python打开网站。代码的相关部分:

br = mechanize.Browser()
br.set_handle_robots(False)
response = br.open('link_to_the_page')

然后我进行必要的身份验证并导航到相应的页面,其中查看成绩的链接位于其中 然后我找到这样的相关链接:

for link in br.links(url_regex='/academic/utility/AcademicRecord.jsp?'):

现在在这里我适当地更改了链接的url和属性。 然后我使用以下方式打开链接:

response=br.follow_link(link)
print response.read()

但它不起作用。它打开相同的链接,即初始卷号。事实上,我尝试将链接的网址更改为与http://www.google.com非常不同的内容。

link.url='http://www.google.com'
link.base_url='http://www.google.com'

它仍会打开同一页面,而不是谷歌的页面。 任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

根据source codefollow_link()click_link()使用link initialization期间设置的链接absolute_url属性。而且,您只设置urlbase_url属性。

解决方案是更改循环中链接的absolute_url

BASE_URL = 'link_to_the_page'
for link in br.links(url_regex='/academic/utility/AcademicRecord.jsp?'):
    modified_link = ...
    link.absolute_url = mechanize.urljoin(BASE_URL, modified_link)
    br.follow_link(link)

希望有所帮助。