我正在尝试使用 Scrapy 来废弃《纽约时报》的一个学校项目。我尝试使用 NYT 提供的 API,但他们不允许访问最近的文章。
我试图废弃这个网站:https://www.nytimes.com/topic/company/alphabet-inc
我不确定出了什么问题,希望得到任何帮助!
我使用了下面的代码:
import scrapy
from bs4 import BeautifulSoup
class NytSpiderSpider(scrapy.Spider):
name = "nyt_spider"
start_urls = ["https://www.nytimes.com/topic/company/alphabet-inc"]
def parse(self, response):
#yield response
titles = response.css('.css-1kv6qi').getall()
descriptions = response.css('.css-1pga48a').getall()
links = response.css('.css-8hzhxf a::attr(href)').getall()
for item in zip(titles, descriptions, links):
all_items = {
'title' : BeautifulSoup(item[0]).text,
'description' : BeautifulSoup(item[1]).text,
'link' : item[2],
}
# yield or give the scraped info to scrapy
yield all_items
回复显示:
信息:抓取了 0 页(以 0 页/分钟),抓取了 0 项(以 0 项/分钟)
代码中阻止您提取所需数据的唯一问题是,在执行
zip(titles, descriptions, links)
时,如果传递给 zip
的任何参数是空列表,它也会返回空列表;
[item for item in zip([1,2], ['a', 'b'])]
# [(1, 'a'), (2, 'b')]
[item for item in zip([1,2], ['a', 'b'], [])]
# []
[item for item in zip([1,2], [], ['a', 'b'])]
# []
因此,在您的代码中,如果您检查
links
的内容,您会发现这是一个空列表,最终不会产生任何结果。