如何使用 Python 和 Selenium 进行分页抓取页面

Posted

技术标签:

【中文标题】如何使用 Python 和 Selenium 进行分页抓取页面【英文标题】:How to Scrape page with pagination with Python & Selenium 【发布时间】:2018-06-01 01:20:04 【问题描述】:

我一直试图从网站上删除“价格历史”标签下的表格 http://merolagani.com/CompanyDetail.aspx?symbol=ADBL

我已使用 Selenium 自动执行该过程,但实际上无法找到实际结果,无法切换到下一页

【问题讨论】:

您的代码请试用。 总是将代码和完整的错误消息(Traceback)放在有问题的地方(作为文本,而不是屏幕截图)。有一些有用的信息。 javascript/AJAX 从http://merolagani.com/handlers/webrequesthandler.ashx?type=get_company_graph&symbol=ADBL&dateRange=12读取数据 已经添加了 ruby​​ 代码,它实际上在答案部分做了一些工作,并且在 python 上遇到了真正的问题,因为我无法使用 Selenium 来自动化单击下一步按钮的过程。 selenium with scrapy for dynamic page的可能重复 【参考方案1】:

编辑: 经过几次测试后,我看到此网址仅提供页面上绘图/图形使用的数据,而不是来自 "Price History" 的数据。我没有看到带有"Price History" 数据的网址,所以这个答案不能解决问题。它将需要更多地挖掘请求和代码。

页面是用ASP.Net 创建的,它有一个非常奇怪的系统来向服务器发送信息。 它使用JavaScript<form> 代替链接来发送许多信息(在名称为_VIEWSTATE 的字段中)。


JavaScript 从 url 中读取数据(以 JSON 格式)

http://merolagani.com/handlers/webrequesthandler.ashx?type=g‌​et_company_graph&sym‌​bol=ADBL&dateRange=1‌​2

所以你也可以试试看

import requests

url = 'http://merolagani.com/handlers/webrequesthandler.ashx?type=get_company_graph&symbol=ADBL&dateRange=12'

r = r.requests(url)

data = r.json()

print('OK:', data['msgType'])
print('Symbol:', data['symbol'])
print('Name:', data['name'])
for row in data['quotes']:
    print('  date:', row['date'])
    print('  open:', row['open'])
    print(' close:', row['close'])
    print('  high:', row['high'])
    print('   low:', row['low'])
    print('volume:', row['volumen'])
    print('   rsi:', row['rsi'])
    print('----------------------')

结果:

OK: ok
Symbol: ADBL
Name: Agriculture Development Bank Limited
  date: 12/18/2016
  open: 540.0
 close: 540.0
  high: 540.0
   low: 525.0
volume: 6847.0
   rsi: 0.0
----------------------
  date: 12/19/2016
  open: 535.0
 close: 520.0
  high: 535.0
   low: 520.0
volume: 6963.0
   rsi: 0.0
----------------------
  date: 12/20/2016
  open: 520.0
 close: 520.0
  high: 530.0
   low: 505.0
volume: 9974.0
   rsi: 0.0
----------------------

【讨论】:

以上是关于如何使用 Python 和 Selenium 进行分页抓取页面的主要内容,如果未能解决你的问题,请参考以下文章

Python+Selenium与Chrome如何进行完美结合

使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?

如何通过 Python 使用 GeckoDriver 和 Firefox 使 Selenium 脚本无法检测?

如何使用 Selenium 和 Python 在 Python 类中调用方法

Python+Selenium与Chrome如何进行完美结合

如何利用python+Selenium对登录的验证码进行验证?