通过分页机械化python爬行

时间:2015-04-28 06:49:52

标签: python mechanize

我正在使用机械化& python抓取网站并获取数据。到目前为止,我可以提交表单并从该页面获取内容。但我无法触发点击“下一页”链接并获取数据。我的代码如下:

import re
import mechanize
from bs4 import BeautifulSoup

br = mechanize.Browser()
br.set_handle_robots(False)
br.open("http://portal.uspto.gov/EmployeeSearch/")
br.select_form(name="SearchEmployeeDataBean")
br.form['name'] = 'a'
response = br.submit()

soup = BeautifulSoup(response)
table = soup.find_all('table')[16]
rows = table.find_all('tr')
data = [[td.findChildren(text=True) for td in tr.findAll("td")] for tr in rows]
for a in data:
    if a:
        examiner = " ".join(a[0][1].split())
        phone = a[1][1]
        extension_office = a[3][1]
        office_description = "|".join(re.findall(r'\d+', a[4][1]))
        # print(examiner, phone, extension_office, office_description)

现在在结果页面上有一个按钮,其中包含文本“下一页>>”。我尝试使用以下代码点击:

按钮HTML:

<a onclick="javascript:goToPage('currentPage', '3')" href="#">Next Page &gt;&gt;</a>

Python代码:

req = br.click_link(text_regex='Next Page >>')
r2 = br.open(req)
r2soup = BeautifulSoup(r2)

但没有成功。

请帮助我如何点击下一个按钮并从那里获取数据,直到没有下一页。

1 个答案:

答案 0 :(得分:1)

我发现机械化问题是它不支持javascript。每当机械化提交后到达页面,然后由于它的分页点击没有触发javascript工作。我用selenium实现了我的目标。和美丽的汤使用以下硒选择器:

elem1 = driver.find_element_by_link_text("Next Page >>")
elem1.click()