在Python mechanize中更改链接
我正在尝试写一个Python脚本,用来生成我班级的排名列表。为了做到这一点,我只需要通过浏览器的检查元素功能,修改链接中的学号参数。这个链接大概是这样的:
/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()
但是它并没有成功。它打开的还是最初的链接,也就是原来的学号。实际上,我甚至尝试把链接的URL改成一个完全不同的,比如http://www.google.com。
link.url='http://www.google.com'
link.base_url='http://www.google.com'
结果它还是打开了同一页面,而不是谷歌的页面。希望能得到一些帮助。
1 个回答
2
根据源代码,follow_link()
和click_link()
这两个功能会使用链接的absolute_url
属性,这个属性是在链接初始化时设置的。而你现在只设置了url
和base_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)
希望这对你有帮助。