我相信这是一个简单的方法,我愿意学习更多。问题是我想通过URL来抓取网站标题。这样做的目的是预测在线新闻的受欢迎程度,而数据来自UCI机器学习存储库。这是the link。
我遵循Scrapy的教程,并按如下所示更改“ quotes spider”中的代码。在终端中运行“ scrapy爬引号”后,我使用“ scrapy爬引号-o quotes.json”将所有标题保存为JSON。
有158人失踪。我有39486个URL,但有39644个网站标题。此外,每个网站的顺序都不适合每个URL。例如,最终标题对应于倒数第三个URL。您能帮我找出问题吗?
这是结果
我尝试在Jupyter Notebook中使用“ Beautiful汤”,但速度很慢,无法确定代码是否仍在运行。
import scrapy
import pandas as pd
df = pd.read_csv("/Users/.../OnlineNewsPopularity.csv",delim_whitespace=False)
url = df['url']
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = url.values.tolist()
def parse(self, response):
for quote in response.css('h1.title'):
yield {
'Title': quote.css('h1.title::text').extract_first(),
}
答案 0 :(得分:0)
如果您的目的只是保持URL和标题之间的对应关系,则可以将URL添加到抓取的项目中:
def parse(self, response):
for quote in response.css('h1.title'):
yield {
'Title': quote.css('h1.title::text').extract_first(),
'url': response.url
}
相反,如果要按顺序处理URL,则有多种方法,有点复杂。 最常见的想法是编写一个方法start_request,在此方法中您仅请求第一个URL。然后,在方法解析中,您请求第二个URL,并将相同的方法(解析)设置为回调;等等...
请参见Sequential scraping from multiple start_urls leading to error in parsing和Scrapy Crawl URLs in Order