【问题标题】:Advice on how to scrape data from this website关于如何从本网站抓取数据的建议
【发布时间】:2018-12-19 13:56:57
【问题描述】:

我想要一些关于如何从这个网站上抓取数据的建议。

我从 selenium 开始,但一开始就卡住了,例如,我不知道如何设置日期。

到目前为止我的代码:

from bs4 import BeautifulSoup as soup
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Font
from selenium import webdriver
from selenium.webdriver.common.by import By
import datetime
import os
import time
import re

day = datetime.date.today().day
month = datetime.date.today().month
year = datetime.date.today().year
my_url = 'https://www.eex-transparency.com/homepage/power/germany/production/availability/non-usability-by-unit/non-usability-history'
cookieValue = '12-c12-cached|from:' +str(year)+ '-' +str(month)+ '-' +str(day-5)+ ','+'to:' +str(year)+ '-' +str(month)+ '-' + str(day) +',dateType:1,company:PreussenElektra,fuel:uranium,canceled:0,durationComparator:ge,durationValue:5,durationUnit:day'
#saving url
browser = webdriver.Chrome(executable_path=r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
my_url = 'https://www.eex-transparency.com/homepage/power/germany/production/availability/non-usability-by-unit'
browser.add_cookie({'name': 'tem', 'value': cookieValue})
browser.get(my_url)
my_url = 'https://www.eex-transparency.com/homepage/power/germany/production/availability/non-usability-by-unit/non-usability-history'
browser.get(my_url)

显然我不是要代码,只是一些关于如何继续使用 Selenium 的建议(如何设置日期和其他数据)或关于如何抓取this website的任何想法

提前致谢。

编辑:我正在尝试遵循 cookie 的方式。那是我更新的代码,我读到需要在加载页面之前创建 cookie,所以我这样做了,知道为什么它不起作用吗?

【问题讨论】:

  • 这个 id affected_date 代表两个元素。 1. 报告的期间 2. 关注的期间,您要选择哪一项
  • 要设置日期,您需要遍历 div 和其中的表格。而已。我不确定你在这里问什么。请更具体。谢谢!
  • 我不知道如何与日历交互。我尝试将日期设置为文本,但它不起作用。
  • @DavideRavera 这听起来像X-Y problem。与其寻求解决问题的帮助,不如编辑您的问题并询问实际问题。你想做什么?
  • 我正在尝试修改日历中的开始日期和结束日期,但我想问得更笼统,因为也许有更直接的方法。例如,我在另一种情况下开始使用 selenium,最终使用了 json,这实际上要快得多。

标签: python selenium


【解决方案1】:

您决定使用 selenium 而不是其他网络抓取工具(scrapy、urllib 等)有什么特别的原因吗?我个人没有使用过 Selenium,但我使用了其他一些工具。下面是一个从页面中提取所有 html 的脚本示例。

import urllib
import urllib2
from bs4 import BeautifulSoup as soup

link = "https://ubuntu.com"
page = urllib2.urlopen(link)
data = soup(page, 'html.parser')

print (data)

这只是一个从页面中提取所有 HTML 的简短脚本。我相信 BeautifulSoup 有额外的工具可以将数据输入到字段中,但是我现在忘记了确切的方法,如果我能找到我的笔记,我会编辑这篇文章。不过,我记得它非常简单。

祝你好运!

编辑:这是我之前保存的来自 reddit 的讨论网络抓取工具 https://www.reddit.com/r/Python/comments/1qnbq3/webscraping_selenium_vs_conventional_tools/

【讨论】:

  • 我已经使用了 urllib,但如果我没记错的话,如果页面链接中不包含输入表单,我将无法与它们交互,我只能拉出 html 并查看它
  • 这篇之前的帖子提供了一些关于如何输入表单 [stackoverflow.com/questions/13166395/….我看了看页面,好像没有什么是“inspect element”处理不了的
【解决方案2】:

对您来说最好的方法是更改​​ cookie,因为每个过滤器数据都保存在 cookie 中。

检查 chrome ( f12 -> application -> cookies ) 中的 cookie 并使用过滤器。如果您要在程序员工具中更改它,您必须刷新网站:)

Check this post on how to change cookies in selenium python.

要从网站获取值,您必须使用经典方式,就像您在这里所做的那样,但您必须使用类:

radio = browser.find_elements_by_class_name('aaaaaa')

您始终可以使用 xPath 来搜索元素(chrome 会为您生成它们)。

【讨论】:

  • 酷我会调查一下
  • 我为什么要寻找价值观?我只是打开带有cookie的页面然后下载html并取出表格?正确的?没有?
  • 我用我到目前为止对 cookie 所做的事情编辑了这个问题。可以看看吗?
  • 是的,您可以下载整个 html,然后通过正则表达式取值。我的 cookie 以12-cached|from: 开头,没有c-12。并尝试在下载 html 之前等待 60 秒。因为这个网站有一个奇怪的加载表过程。
  • 但我看到的是它找到实际数据的速度更快(例如相同的 cookie,但周期为 2018/4/2 - 2018/7/11)。我应该将睡眠时间设置为 60 秒还是 10 秒之类的就可以了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2019-08-27
  • 2019-08-25
相关资源
最近更新 更多