【问题标题】:Web scraping from multiple tables appearing on click从点击时出现的多个表中抓取网页
【发布时间】:2016-03-23 18:58:00
【问题描述】:

基本上我想打开this 页面,从最后一个下拉列表中选择“Rüzgar”,使用“Sorgula”按钮运行查询并提取存储在表中的所有坐标,一旦单击第一列的第一个按钮,就会出现在主表中。我想对所有行都这样做。

很遗憾,我没有足够的编程经验来完成这项任务。但是,由于我对编程有点熟悉,我想如果有人会为我指出正确的来源来学习如何做到这一点(关于我试图从中提取数据的网页的要求) 我可以为这个任务构建一个小脚本,可能使用 scrapy 或其他工具。

P.S.:我尝试用 scrapinghub 的 Portia 来做,但也没有用。

【问题讨论】:

  • 快速浏览一下,如果我想抓取该网站,我会使用 selenium

标签: web-scraping scrapy portia scrapinghub


【解决方案1】:

看看名为selenium 的Python 模块,即它的webdriver 部分。一些可以执行您所追求的搜索查询的快速代码将这样编写:

from selenium import webdriver

driver = webdriver.Firefox()
search_link = 'http://lisans.epdk.org.tr/epvys-web/faces/pages/lisans/elektrikUretimOnLisans/elektrikUretimOnLisansOzetSorgula.xhtml?lisansDurumu=7'

driver.get(search_link)
last_dropdown_menu = driver.find_element_by_id('elektrikUretimOnLisansOzetForm:j_idt32')

last_dropdown_menu.click() # send a click to the element
last_dropdown_menu.send_keys('R') # scroll to Ruzgar
sorgula_button = driver.find_element_by_xpath('//*[@id="elektrikUretimOnLisansOzetForm:j_idt51"]/span[2]').click()

从那里,您可以弄清楚如何抓取您所追求的信息 :-)

【讨论】:

  • 感谢您提供非常有用的答案。但是我真的需要更多的解释来说明如何自动抓取单击第一列中的第一个按钮后出现的所有坐标的操作(我需要自动遍历所有行)
  • 发送必要的点击以使您想要抓取的信息弹出,然后检查页面的来源并查看您想要的信息在哪种标签中。抓取这些标签中的文本,例如所以:table_you_want = driver.find_element_by_id('elektrikKoordinatViewDataTable_data') for tr in table_you_want: print tr.text
  • 非常感谢,我会尽量按照你解释的方式去做。
【解决方案2】:

Selenium 可能没问题,因为当您将底部的分页设置为 500 时只有 3 页。不过我不会使用 selenium,因为它......有更好的方法。

当您点击“Rüzgar”按钮时,您所做的只是一个带有以下参数的 POST 请求:

打开 chrome 调试器并亲自查看您正在执行的请求类型。您可以复制请求。如果您对这种方法感兴趣,请告诉我——也许——再写一些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多