Scrapy 中的空 .json 文件
Empty .json File in Scrapy
我写了这个非常短的蜘蛛去U.S。新闻 link 并获取此处列出的大学名称。
#!/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(),
}
然而,当我 运行 这个蜘蛛程序并要求将名称存储在一个名为 schools.json 的文件中时,该文件是空白的。我做错了什么?
我在手机上,所以不记得确切的变量名称,但应该是 robots_follow
设置为假
您指的起始页面 url 不包含任何 ID 为 view-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969
的元素- 它看起来很独特,似乎不是漂亮的选择通用 XPath 表达式。我建议使用 school.xpath('.//div[@data-view="colleges-search-results-card"]//h3/a/text()').extract()
之类的东西
知道了!是因为机器人检测。
编码
>>> 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中编码header的过程应该非常相似。
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
我写了这个非常短的蜘蛛去U.S。新闻 link 并获取此处列出的大学名称。
#!/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(),
}
然而,当我 运行 这个蜘蛛程序并要求将名称存储在一个名为 schools.json 的文件中时,该文件是空白的。我做错了什么?
我在手机上,所以不记得确切的变量名称,但应该是 robots_follow
设置为假
您指的起始页面 url 不包含任何 ID 为 view-1c4ddd8a-8b04-4c93-8b68-9b7b4e5d8969
的元素- 它看起来很独特,似乎不是漂亮的选择通用 XPath 表达式。我建议使用 school.xpath('.//div[@data-view="colleges-search-results-card"]//h3/a/text()').extract()
知道了!是因为机器人检测。
编码
>>> 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中编码header的过程应该非常相似。
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