我正努力地与Scrapy一起仅将“匹配”输出到json文件。我是新来的人,因此,如果只有一个链接我应该查看,那可能会有所帮助(我花了很多时间在Google上搜索,但仍在苦苦挣扎),尽管更欢迎使用代码更正技巧:)。
我正在研究繁琐的教程(https://doc.scrapy.org/en/latest/intro/overview.html),原始代码将输出一长串,包括字段名称和类似“ field:output”之类的输出,其中同时显示空白和找到的项目。我只想包含找到的链接,并将不带字段名称的链接输出到文件中。
对于我正在尝试的以下代码,如果我发出“ scrapy crawl quotes2 -o quotes.json> output.json,它可以工作,但是quotes.json始终为空(即,包括如果我执行“ scrapy crawl quotes2- o quotes.json”)。
在这种情况下,作为实验,我只想返回URL中的字符串“ Jane”(例如/ author / Jane-Austen):
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes2"
start_urls = [
'http://quotes.toscrape.com/tag/humor/',
]
def parse(self, response):
for quote in response.css('a'):
for i in quote.css('a[href*=Jane]::attr(href)').extract():
if i is not None:
print(i)
我已经尝试过“ yield”和items选项,但是还不够快,无法使其正常工作。我的长期目标是去网站而不必了解html树(这本身可能是错误的方法),并在URL字符串中查找包含特定文本的URL。
有什么想法吗?我猜这不太难,但是超出了我。
答案 0 :(得分:0)
发生这种情况是因为您正在打印项目,所以必须明确告知Scrapy以“屈服”它们。 但是在此之前,我不明白为什么要遍历锚点节点,而不是为什么应该使用css或XPath选择器遍历引号,提取引号内的所有作者链接,最后检查该URL是否包含特定的String(简为你辩护)。
for quote in response.css('.quote'):
jane_url = quote.xpath('.//a[contains(@href, "Jane")]').extract_first()
if jane_url is not None:
yield {
'url': jane_url
}