【发布时间】:2017-08-09 14:06:23
【问题描述】:
我对 Scrapy 有疑问。 我想废弃一个 N url 列表(在同一个网站上),但我不知道哪个 URL 可以工作。实际上我想在网站上“搜索”一些东西,一条路-村庄-县。 如果我告诉网站搜索道路+村庄+县,他可能找不到任何东西。如果他没有找到我想要的,我会做一个更“全球”的搜索,只搜索村+县,最后只搜索县。 示例:我有位置:
“D 32, Serrières-de-Briord, Belley, Ain, Auvergne-Rhône-Alpes”。这里 我们有 [Road = D 32], [Serrières-de-Briord : (精确和小) commune] , [Belley: (最近和大的) commune], [Ain: Department], [奥弗涅-罗讷-阿尔卑斯大区]。
我想做的是: 搜索
D 32+Serrières-de-Briord+Belley+Ain+奥弗涅-罗讷-阿尔卑斯
如果没有结果,搜索:
Serrières-de-Briord+Belley+Ain+Auvergne-Rhône-Alpes。
如果没有结果,搜索
贝利+艾因+奥弗涅-罗讷-阿尔卑斯
(通常,此时没问题)。
问题是我想为 25 000 个地点执行此操作。所以我不能给 scrapy 25000*3 = 75 000 URL 报废。问题还在于避免 Scrapy 多次抓取相同的信息。 因此,我想做的是: start_url = [最精确级别的所有 URL - 25] 对于 start_url 中的 url: 如果没有我想要的:去废弃“url1”(它是从 url 构建的,但更精确)。 如果 url1 没有我想要的:去废弃“url2”(从 url1 构建,此时应该没问题)。 如果我有一个好的“url”,请转到 parse() (并获取我需要的信息)。
这是我的代码:
import scrapy
from scrapy.http import Request
class QuotesSpider(scrapy.Spider):
name = "street"
start_urls = [
'http://prix-immobilier.lemonde.fr/prix-immobilier/recherche?q=rue+des+colonnes+du+trone+Paris+Ile-de-France+75012',
'http://prix-immobilier.lemonde.fr/prix-immobilier/recherche?q=Route+Badevel+à+Saint-Dizier%2C+Badevel%2C+Montbéliard',
]
def start_requests(self):
for urly in self.start_urls:
yield Request(url=urly,callback=self.enjoy)
def enjoy(self,response):
if response.css("#price_container h1::text").extract_first()[:4]=="Prix":
yield Request(url=urly,callback=self.parse)
else:
pass
def parse(self,response):
I parse the info...
这里的“享受”部分是只选择有趣的 url 并“传递”其他的。但是,这个脚本不起作用。我收到此错误:
line 27, in enjoy
yield Request(url=urly,callback=self.parse)
NameError: name 'urly' is not defined
而且我不知道如果我没有找到任何东西(而不是仅“通过”...),我该怎么说搜索我从前一个创建的另一个 URL。
我希望我的问题足够清楚。 谢谢你的帮助 !
【问题讨论】:
-
75.000 个请求对我来说听起来不错,你为什么不这样做?
-
如果我创建了 url-url1-url2,如果 Scrapy 成功抓取了 url 的信息,他也会抓取 url1 和 url2,所以我会有 3 个信息,这很不方便。我首先搜索最精确的东西。但是如果我不能拥有它,我说“好吧,让我们有一个更通用的,我会说这个值将是“精确”位置的值”。例如:如果我没有“Serrières-de-Briord”但我有“Belley”,我将捕捉“Belley”的值并将其作为“Serrières-de-Briord”的值。但是,如果是“Serrières-de-Briord”作品,我不需要额外的价值。
标签: python python-3.x web-scraping scrapy