在Python mechanize中更改链接

2 投票
1 回答
3711 浏览
提问于 2025-04-18 06:39

我正在尝试写一个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属性,这个属性是在链接初始化时设置的。而你现在只设置了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)

希望这对你有帮助。

撰写回答