python - 使用scrapy时如何解决订单问题?
问题描述
我相信这是一个简单的,我愿意学习更多。问题是我想通过 URL 抓取网站标题。这样做的目的是预测在线新闻的流行度,数据来自 UCI 机器学习存储库。这是链接。
我按照 Scrapy 的教程,将“quotes spider”中的代码更改如下。在终端中运行“scrapy crawl quotes”后,我使用“scrapy crawl quotes -o quotes.json”将所有标题保存为JSON。
有158人失踪。我有 39,486 个 URL,但有 39,644 个网站标题。此外,每个网站的顺序并不适合每个 URL。例如,最终标题对应倒数第三个 URL。你能帮我找出问题吗?
这是结果
我尝试在 Jupyter Notebook 中使用“美丽的汤”,但速度很慢,无法判断代码是否仍在运行。
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(),
}
解决方案
如果您的目标只是保持 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,将相同的方法(解析)设置为回调;等等...
推荐阅读
- c# - GraphQL.Types.EnumerationGraphType 出错
- npm - 使用 NPM 安装后无法在我的 main.js 文件中使用 Axios
- html - HTML/CSS 边框随着溢出而增长
- wordpress - 无需用户登录和权限回调的 WP REST API creting 和端点
- flutter - Flutter 图像悬停叠加效果
- sql-server - 在mac上访问数据库备份文件?(.bak)
- php - Input Data Based on Another Input - Laravel
- mongodb - MongoDB: Aggregate query to sum duration field
- xml - powershell write xml with no escaping
- asp.net-mvc - ASP.NET 3.1 MVC: Displaying UserIdentity details in View() when clicking their names on the website