【问题标题】:Empty .json File in ScrapyScrapy 中的空 .json 文件
【发布时间】:2017-06-14 08:10:38
【问题描述】:

我写了这个很短的蜘蛛来访问美国新闻链接并获取那里列出的大学的名称。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import scrapy

class CollegesSpider(scrapy.Spider):
    name = "colleges"
    start_urls = [
        'http://colleges.usnews.rankingsandreviews.com/best-colleges/rankings/national-universities?_mode=list&acceptance-rate-max=20'
    ]

    def parse(self, response):
        for school in response.css('div.items'):
            yield {
                'name': school.xpath('//*[@id="view-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969"]/div/div[1]/div[1]/h3/a').extract_first(),
            }

但是,当我运行此蜘蛛并要求将名称存储在名为 school.json 的文件中时,该文件显示为空白。我做错了什么?

【问题讨论】:

  • 您是否看到终端/CLI 中产生的项目?
  • @Umair 你是什么意思?我的终端输出没有显示错误。
  • @Umair 我确实得到了这个,尽管“HTTP 状态代码未处理或不允许”
  • @ch1maera 是的,我复制了它。我的直觉是自动停止机器人。你需要在一些听者中编码并伪装成浏览器
  • @Bobby 所以基本上是这样的:stackoverflow.com/questions/18920930/… ?

标签: python json web-scraping scrapy scrapy-spider


【解决方案1】:

知道了!这是因为机器人检测。

编码

>>> r = requests.get('http://colleges.usnews.rankingsandreviews.com/best-colleges/rankings/national-universities?_mode=list&acceptance-rate-max=20', headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'})
>>> r.status_code
200

然后您将拥有所需的所有内容。做任何你需要的解析或提取。在 Scrapy 中对标头进行编码的过程应该非常相似。

scrapy doc for request with headers

Chrome 用户代理

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

【讨论】:

    【解决方案2】:

    您所指的起始 url 页面不包含任何 ID 为 view-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969 的元素 - 它看起来非常独特,并且似乎不是非常通用的 XPath 表达式的好选择。我建议使用类似school.xpath('.//div[@data-view="colleges-search-results-card"]//h3/a/text()').extract()

    【讨论】:

    • 我试过了,但我仍然收到“HTTP 状态代码未处理或不允许”
    【解决方案3】:

    我在手机上,所以不记得确切的变量名称,但应该是 robots_follow

    设置为假

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 2021-06-22
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 2012-12-10
      • 2019-11-24
      相关资源
      最近更新 更多