【问题标题】:Web Scraping using Scrapy使用 Scrapy 进行网页抓取
【发布时间】:2023-04-03 11:49:02
【问题描述】:

我正在抓取 Flipcart 网站,我想从网站中提取图片 URL。 This is the link to the website.

import scrapy
from ..items import FlipcartItem
class QuotesSpider(scrapy.Spider):
    name='quotes'
    start_urls=[
        'https://www.flipkart.com/clothing-and-accessories/topwear/pr?sid=clo%2Cash&otracker=categorytree&p%5B%5D=facets.ideal_for%255B%255D%3DMen'
        ]
    def parse(self,response):
        items=FlipcartItem()
        image_url=response.css('._2r_T1I img::attr(src)').extract()
        #product_page_url=response.css('').extract()
        items['image_url']=image_url
        #items['product_page']=title
        yield items

这是我编写的代码,在运行代码时我得到一个空列表。像 image_url ["","",""]。任何人都可以请 建议我哪里出错了?

【问题讨论】:

    标签: python web scrapy screen-scraping


    【解决方案1】:

    此站点正在使用 javascript 加载 scrapy 无法访问的图像。你需要使用 selenium 提取图像数据。在这里,我使用scrapy Selector 用硒提取图像数据。如果你想关注这个urlscrapy splash,你可以使用带有硒的scrapy。

    from selenium import webdriver
    from scrapy.selector import Selector
    browser = webdriver.Firefox(executable_path='./geckodriver')
    browser.get(url="https://www.flipkart.com/clothing-and-accessories/topwear/pr?sid=clo%2Cash&otracker=categorytree&p%5B%5D=facets.ideal_for%255B%255D%3DMen")
    
    page = browser.page_source
    image_data = Selector(text=page)
    image_data = image_data.css('img._2r_T1I::attr(src)').extract()
    # print(image_data.xpath('//div[@class="CXW8mj _21_khk"]/img/@src').get())
    
    print(image_data)
    

    如果需要安装selenium,请关注url

    【讨论】:

      【解决方案2】:

      你应该考虑改变这一行:

      image_url=response.css('._2r_T1I img::attr(src)').extract()
      

      对此,

      image_urls=response.css('img._2r_T1I').xpath('@src').getall()
      

      您还应该知道,即使只有一个项目,您的“image_url”也将是一个数组,因为这就是 scrapy 返回的内容。您可能希望遍历结果并为每个结果创建一个新的FlipcartItem,或者如果您只期望一个结果,您可能希望将其从列表中拉出。

      【讨论】:

        【解决方案3】:

        我试过这样做:

        import scrapy
        class QuotesSpider(scrapy.Spider):
            name='quotes'
            start_urls=[
                'https://www.flipkart.com/clothing-and-accessories/topwear/pr?sid=clo%2Cash&otracker=categorytree&p%5B%5D=facets.ideal_for%255B%255D%3DMen'
                ]
            def parse(self,response):
                raw_image_urls=response.css('img._2r_T1I').xpath('@src').getall()
                clean_image_urls=[]
                for img_url in raw_image_urls:
                    clean_image_urls.append(response.urljoin(img_url))
                yield{
                'image_urls':clean_image_urls
                }
        

        但是获取的是主页的网址。不是图片网址。

        【讨论】:

          【解决方案4】:

          这是一个 Javascript 生成的内容网站。使用“查看页面源”,可以看到图片src是空的。代码没有错。只需使用 SeleniumScrapy Splash 他们会为您加载所有 javascript,以便您可以抓取数据。

          【讨论】:

            猜你喜欢
            • 2021-01-13
            • 1970-01-01
            • 2020-08-31
            • 1970-01-01
            • 1970-01-01
            • 2018-09-25
            • 1970-01-01
            • 2014-09-15
            • 2015-04-15
            相关资源
            最近更新 更多