在检索搜索页面之前抓取登录后提供选择的网站

Scraping of website that present a choice after login before retrieve the searched page

我尝试抓取一个行为异常的网站。 我将 URL 指向我想要检索的页面,因为普通网站向我显示登录页面,我提交表单元素然后我想抓取页面但是在我提交表单之后网站向我展示了一个页面选择(两个 links)来选择我的个人资料,单击所选个人资料后,我可以访问我想要的页面。在 mechanize 中,我无法单击 link 来检索我想阅读的页面。 这是我的代码:

from bs4 import BeautifulSoup as bs
import urllib3
import mechanize
import cookielib
cj = cookielib.CookieJar()
br = mechanize.Browser()
br.set_handle_robots(False)
br.set_cookiejar(cj)
br.open("the_url_I_want_scrape")
br.select_form(nr=2)
br.form.set_all_readonly(False)
br.form['username'] = "my_user"
br.form["password"] = "my_pass"
br.form["button.submit"] = "entra"
br.submit()
html = br.response().read()

现在,如果我在 link 中迭代,我有两个对象:

for link in br.links():
    print link

它看起来像以下几行:

Link(base_url='https://www.sito.com/internal/login', url='/internal/sessionProperty?sessid=1111', text='Profile1', tag='a', attrs=[('href', '/nternal/sessionProperty?sessid=1111')])
Link(base_url='https://www.sito.com/internal/login', url='/shres/internal/sessionProperty?sessid=3333', text='Profile2', tag='a', attrs=[('href', '/internal/sessionProperty?sessid=3333')])

如何模拟点击它并解析结果页面? 我尝试将 abolute_url 添加到 link 然后使用 follow_link 但它挂起并且不再响应 我使用的代码是:

for link in br.links():
  link.absolute_url = mechanize.urljoin(link.base_url,link.url)
  br.follow_link(link)

有人可以帮助我吗? 谢谢 亚历克斯

当我需要大量使用 Javascript 来抓取网站(如隐藏菜单)并且不得不使用 Selenium 来模拟浏览器行为而不是机械化时,我也有过类似的经历。你可以试试。

您还可以按照 this 问题中所述跟踪 POST 请求并尝试模拟它。