info-climat.fr的python web scrapy

时间:2017-08-04 10:06:57

标签: python web-scraping scrapy

我想使用Python Scrapy下载https://www.infoclimat.fr/historic/

中包含的信息

Screenshots of the site

以下是我需要的列:重要性,日期,日期,类型,本地化,描述(可选)。

Items.py

class ClimatItem(Item):
    importance = Field()
    date_start = Field()
    date_end = Field()
    type = Field()
    localisation = Field()
    description = Field()

但是,无法通过源代码访问它们。它们似乎包含在一些javascript脚本中,以为我不太了解Web结构。

有人可以帮帮我吗?几天以来我一直在研究这个问题,但无法在任何地方找到任何解决方案。非常感谢。

2 个答案:

答案 0 :(得分:3)

似乎通过AJAX检索数据。由于scrapy不执行任何javascript,您需要手动复制此行为。

幸运的是,在这种情况下可以轻松复制。如果您在浏览器的检查工具中查看网络标签,则会在加载网页时看到正在发出GET XHR请求:

enter image description here

它返回一个json,其中包含表中的所有数据。

所以要在scrapy中复制这个,你需要:

  1. 找出url参数(或者只是从检查器中复制它们)。
  2. 复制请求标头。
  3. 例如,我有这个工作:

    def parse(self, response):
        url = """https://www.infoclimat.fr/historic/getData.php?importance=&valfilter=1&operator=%3E&evalue=&duree=0&type=0&lieu=0&dh_deb=&dh_end=&mois=&year=&sEcho=2&iColumns=9&sColumns=&iDisplayStart=30&iDisplayLength=30&sSearch=&bRegex=false&sSearch_0=&bRegex_0=false&bSearchable_0=true&sSearch_1=&bRegex_1=false&bSearchable_1=true&sSearch_2=&bRegex_2=false&bSearchable_2=true&sSearch_3=&bRegex_3=false&bSearchable_3=true&sSearch_4=&bRegex_4=false&bSearchable_4=true&sSearch_5=&bRegex_5=false&bSearchable_5=true&sSearch_6=&bRegex_6=false&bSearchable_6=true&sSearch_7=&bRegex_7=false&bSearchable_7=true&sSearch_8=&bRegex_8=false&bSearchable_8=true&iSortingCols=1&iSortCol_0=2&sSortDir_0=desc&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&bSortable_4=true&bSortable_5=true&bSortable_6=false&bSortable_7=true&bSortable_8=true&_=1501841738200"""
        headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'X-Requested-With': 'XMLHttpRequest',
        }
        yield Request(url, self.parse_json, headers=headers) 
    
    def parse_json(self, response):
        data = json.loads(response.body)
        # here you can inspect json data and pick out the fields you need
    

答案 1 :(得分:0)

对于动态网页,您有以下选项:

  1. 使用selenium
  2. 使用splinter
  3. 使用Splash
  4. 所有这些基本上都是调用外部浏览器并访问浏览器的DOM而不是仅处理HTML。