gpt4 book ai didi

python - 抓取纽约时报每日词汇

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:35 25 4
gpt4 key购买 nike

我最近才开始接触 Scrapy,我选择了《纽约时报》每日一语作为第一个测试。 https://www.nytimes.com/column/learning-word-of-the-day

我注意到他们有一个 API,但就我的确切情况而言,它没有我可以使用的东西(我认为)。我基本上是想浏览该页面上当天的每个单词,并检索单词、含义和示例段落。

这段简短的代码应该遍历每个 url 并至少检索单词,但我遇到了很多错误,我不知道为什么!我一直在使用 SelectorGadget 来获取我需要的 CSS 代码,到目前为止这是我的代码:

import scrapy

class NewYorkSpider(scrapy.Spider):
name = "times"
start_urls = [ "https://www.nytimes.com/column/learning-word-of-the-day" ]

# entry point for the spider
def parse(self,response):
for href in response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "headline", " " ))]'):
url = href.extract()
yield scrapy.Request(url, callback=self.parse_item)

def parse_item(self, response):
word = response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "story-subheading", " " ))]//strong').extract()[0]

非常感谢!

更新错误(现在不完全是错误,只是没有抓取假定的信息):

2017-01-18 01:13:48 [scrapy] DEBUG: Filtered duplicate request: <GET https://www.nytimes.com/column/%3Ch2%20class=%22headline%22%20itemprop=%22headline%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Word%20+%20Quiz:%20spawn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/h2%3E> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)
2017-01-18 01:13:48 [scrapy] DEBUG: Crawled (404) <GET https://www.nytimes.com/column/%3Ch2%20class=%22headline%22%20itemprop=%22headline%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Word%20+%20Quiz:%20spawn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/h2%3E> (referer: https://www.nytimes.com/column/learning-word-of-the-day)
2017-01-18 01:13:48 [scrapy] DEBUG: Crawled (404) <GET https://www.nytimes.com/column/%3Ch2%20class=%22headline%22%20itemprop=%22headline%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Word%20+%20Quiz:%20introvert%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/h2%3E> (referer: https://www.nytimes.com/column/learning-word-of-the-day)
2017-01-18 01:13:48 [scrapy] DEBUG: Crawled (404) <GET https://www.nytimes.com/column/%3Ch2%20class=%22headline%22%20itemprop=%22headline%22%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Word%20+%20Quiz:%20funereal%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C/h2%3E> (referer: https://www.nytimes.com/column/learning-word-of-the-day)

最佳答案

您正在 .css 中使用 xpath 表达式方法,用于 css 选择器表达式。
只需替换 .css.xpath :

response.css('//*[contains(concat( " ", @class, " " ), concat( " ", "headline", " " ))]')
# to
response.xpath('//*[contains(concat( " ", @class, " " ), concat( " ", "headline", " " ))]')

关于您的第二个错误 - 提取的网址不是绝对网址,例如/some/sub/page.html .要将其转换为绝对网址,您可以使用 response.urljoin()功能:

 for href in response.xpath('...'):
url = href.extract()
full_url = response.urljoin(url)
yield Request(full_url)

关于您的第三个错误 - 您的 xpath 在这里有问题。看起来您使用了一些 xpath 生成器,而这些东西很少生成任何有值(value)的东西。您在这里寻找的只是一个 <a>节点 story-link类:

urls = response.xpath('//a[@class="story-link"]/@href').extract()
for url in urls:
yield Request(response.urljoin(full_url))

对于你的单词 xpath,你可以简单地使用 text under node which is under :

word = response.xpath("//h4/strong/text()").extract_first()

关于python - 抓取纽约时报每日词汇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com