如何让 scrapy 爬虫不以指数方式聚合结果
How do I make the scrapy crawler not to agregate results exponentially
所以我是 Python 的新手,我正在尝试制作一个 scrapy 爬虫以从网站中提取分销商数据。但我没有得到预期的结果。这是我的代码:
class QuotesSpider(scrapy.Spider):
name = "final_url"
def start_requests(self):
urls = [
"https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/almagro/2675585174/?countrySelectorCode=AR"
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
urls_ = []
for item in response.css('div.row.m-dealer_list__row'):
half_urls_ = item.css('div.m-dealer_list__addr a.link.trackingElement::attr(href)').getall()
for half in half_urls_:
urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)
with open('sub_urls.txt', 'a') as doc:
doc.write(str(urls_))
我希望每个经销商都有一个 link (href) -5 在这种情况下 - 我可以在其中提取名称、地址、邮件、phone 和站点。相反,我得到了这个令人困惑的结果:
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00303/almagro/medrano-construcciones-s./?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00303/almagro/medrano-construcciones-s./?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00304/almagro/medrano-construcciones-s.a./?countrySelectorCode=AR']
我认为这可能是由于 .write 函数中的 'a' 模式,但如果我使用 'w' 我只是得到最后一个 link。而这个 url 我屈服只是 700 分之一,所以最初创建的 .text 非常大而且无用。
在此先感谢您提供的任何帮助。我觉得这是我只是没有看到的一些非常愚蠢的问题。
写入文件的行在其中:
for half in half_urls_:
urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)
with open('sub_urls.txt', 'a') as doc:
doc.write(str(urls_))
将它向后移动一个缩进级别。它将每个分销商的完整分销商列表附加到文件中。
这样试试:
for half in half_urls_:
urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)
with open('sub_urls.txt', 'a') as doc:
doc.write(str(urls_))
所以我是 Python 的新手,我正在尝试制作一个 scrapy 爬虫以从网站中提取分销商数据。但我没有得到预期的结果。这是我的代码:
class QuotesSpider(scrapy.Spider):
name = "final_url"
def start_requests(self):
urls = [
"https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/dealerslist/almagro/2675585174/?countrySelectorCode=AR"
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
urls_ = []
for item in response.css('div.row.m-dealer_list__row'):
half_urls_ = item.css('div.m-dealer_list__addr a.link.trackingElement::attr(href)').getall()
for half in half_urls_:
urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)
with open('sub_urls.txt', 'a') as doc:
doc.write(str(urls_))
我希望每个经销商都有一个 link (href) -5 在这种情况下 - 我可以在其中提取名称、地址、邮件、phone 和站点。相反,我得到了这个令人困惑的结果:
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00303/almagro/medrano-construcciones-s./?countrySelectorCode=AR']
['https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00077/almagro/colombo-fernando-javier/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00417/almagro/easy-rivadavia-%28e164%29-cencosud/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00506/almagro/g-y-p-new-tree-s.a/?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00303/almagro/medrano-construcciones-s./?countrySelectorCode=AR',
'https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/localizador-de-distribuidores/distribuidor/boschla00304/almagro/medrano-construcciones-s.a./?countrySelectorCode=AR']
我认为这可能是由于 .write 函数中的 'a' 模式,但如果我使用 'w' 我只是得到最后一个 link。而这个 url 我屈服只是 700 分之一,所以最初创建的 .text 非常大而且无用。
在此先感谢您提供的任何帮助。我觉得这是我只是没有看到的一些非常愚蠢的问题。
写入文件的行在其中:
for half in half_urls_:
urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)
with open('sub_urls.txt', 'a') as doc:
doc.write(str(urls_))
将它向后移动一个缩进级别。它将每个分销商的完整分销商列表附加到文件中。
这样试试:
for half in half_urls_:
urls_.append('https://www.bosch-professional.com/ar/es/dl/localizador-de-distribuidores/' + half)
with open('sub_urls.txt', 'a') as doc:
doc.write(str(urls_))