Scrapy 返回无值,或者根本没有文本

问题描述 投票:0回答:1

我正在寻找一些当地的汽车网站来跟踪价格,这样当它们开始“促销”时,我实际上可以判断它是否属实。

我已经完成了 books.toscrape 网站。我为高尔夫球杆制作了一个追踪器,但我不明白为什么我在汽车追踪器上没有得到任何回报。

以下是我目前所拥有的:

我尝试过选择器、XPATH、完整 Xpath,但就是不明白

import scrapy
import csv
import pandas as pd
from datetime import date
from scrapy.crawler import CrawlerProcess

today = date.today()
today = str(today)


class Airdrie(scrapy.Spider):
    name = "AirdrieHonda"
    allowed_domains = ["aidriehonda.ca"]
    start_urls = ["https://www.airdriehonda.ca/vehicles?refinementList=%7B%22stock_type%22%3A%5B%22NEW%22%5D%2C%22model_name%22%3A%5B%22CR-V%22%5D%7D"]
    
    def parse(self, response):
        Airdrie_Car = response.css("#app > main > div.container.max-w-\[97rem\] > div > div > div.grid-cols-4.mb-64 > div > div:nth-child(2) > a.contents > div > div.inventory_footer__wspJ5.typ-label > p ::text").extract()
        Aidrie_Price = response.css("main > div.container.max-w-\[97rem\] > div > div > div.grid-cols-4.mb-64 > div > div:nth-child(2) > a.contents > div > div.flex.flex-row.flex-grow.w-full > div > div.col-span-1.text-right > span ::text").extract()
        Airdrie_DF = pd.DataFrame(list(zip(*[Airdrie_Car,Aidrie_Price]))).add_prefix('Col')
        Airdrie_DF = Airdrie_DF.replace(r'\n',' ', regex=True)
        Airdrie_DF.rename(columns={"Col0":"Type", "Col1": "Price",}, inplace = True)
        Airdrie_DF.to_csv(("AirdrieHonda" + (today) + ".csv"), encoding='utf-8', index=False)
        
        print(Airdrie_DF)

process = CrawlerProcess()
process.crawl(Airdrie)
process.start()

我希望获取所有当前汽车、型号、价格的列表,然后导出到 CSV。

我可以弄清楚那部分,但我就是无法获取我想要提取的数据。

python scrapy web-crawler
1个回答
0
投票

对于任何读过这篇文章并且有同样问题的人来说。我想通了。某些网站会阻止您使用机器人访问其网站并抓取数据。

它很容易解决。您可以谷歌“Google 用户代理”。然后使用他们的用户代理,更新 scrapy 项目中的 settings.py 文件,然后它将绕过限制。

我在几个网站上测试过。在我得到“0 页被刮掉”且没有任何回报之前。事实证明这是一个 403 错误(被阻止访问该网站)。将 USER_AGENT 更新到 Google 后,就没有问题了。

© www.soinside.com 2019 - 2024. All rights reserved.