python - 更改 python mechanize 中的链接

标签 python web-scraping mechanize mechanize-python

我正在尝试编写一个 python 脚本来生成我的批处理的排名列表。为此,我只需使用网络浏览器中的检查元素功能更改链接的卷号参数。链接(相对)看起来像:

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

我只需要更改登录代码即可获取我的批处理队友的成绩。我正在尝试使用 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'

它仍然打开相同的页面,而不是谷歌的页面。 任何帮助将不胜感激。

最佳答案

根据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)

希望有帮助。

关于python - 更改 python mechanize 中的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23677442/

相关文章:

python 运行时错误 : "mi" not found for replace

python - 从产品概述菜单中的子页面获取文本

python - 创建 xpath 以便能够有条件地定位元素时遇到问题

ruby - 调节/速率限制 ruby Mechanize

Python:在 Explorer/Nautilus/Finder 中打开文件夹

python - 按行打印 pandas 列名称和单元格值

python - python中如何在某些情况下终止进程

html - 如何使用 rvest 跟踪带有数据参数的链接

ruby - 在 Mechanize (Ruby) 中跳过大页面

Python Mechanize 表单提交