我该如何使“脏兮兮”的爬虫不以指数形式破坏结果

2024-06-02 22:02:13 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我对Python还很陌生,我正在尝试制作一个爬行器来从站点提取分发服务器数据。但我没有得到我期望的结果。这是我的密码:

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_))

我希望有一个链接(href)到每个分销商-5在这种情况下-我可以提取名称,地址,邮件,电话和网站。相反,我得到了一个令人困惑的结果:

['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”,我只会得到最后一个链接。我提供的这个url只是700多个url中的一个,所以最初创建的.text非常大,没有用

提前感谢您提供的任何帮助。我觉得这真是一个愚蠢的问题,我只是没有看到


Tags: httpscomeswwwdeardlprofessional
1条回答
网友
1楼 · 发布于 2024-06-02 22:02:13

写入文件的行在其中:

            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_))

相关问题 更多 >