【问题标题】:I wants to scrape indiamart.com but it returns none我想抓取 indiamart.com 但它没有返回
【发布时间】:2023-02-14 18:49:39
【问题描述】:

我是 scrapy 的新手。我想从 alibaba.com 中删除数据,但我没有得到任何数据。我不知道问题出在哪里。这是我的代码

class IndiaSpider(scrapy.Spider):
name = 'india'
allowed_domains = ['indiamart.com']
# search_value = 'car'
start_urls = [f'https://dir.indiamart.com/search.mp?ss=laptop&prdsrc=1&res=RC4']

user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
def request_header(self):
    yield scrapy.Request(url=self.start_urls, callback=self.parse, headers={'User-Agent':self.user_agent})

def parse(self, response):
    title = response.xpath("//span[@class='elps elps2 p10b0 fs14 tac mListNme']/a/text()").get()
    related_link = response.xpath("//span[@class='elps elps2 p10b0 fs14 tac mListNme']/a/@href").get()
        
    yield{
        'titling':title,
        'rel_link':related_link
    }

我越来越

2023-02-14 15:20:34 [scrapy.core.scraper] DEBUG: Scraped from <200 https://dir.indiamart.com/search.mp?ss=car&prdsrc=1&res=RC4>

{'标题':无,'rel_link':无,'图像':[]} 2023-02-14 15:20:34 [scrapy.core.engine] 信息:关闭蜘蛛(完成)

我昨天得到了结果,它运行良好,但今天没有返回任何结果。它不是基于 javascript 的网站。我尝试了不止一次但返回相同

【问题讨论】:

  • 您正在尝试访问项目的标题?
  • 实际上我想废弃 product_name 、 product_title 、 product_price 和 product_detail 链接。这是代码仅供示例,但我收到错误
  • @Sarfraz 你的最后 3 个问题有同样的问题。数据由 JavaScript 填充。您可以通过在浏览器中禁用 JavaScript 来检查这一点,然后刷新页面以查看差异。
  • 是的...!我的错。我不知道如何禁用 javascript。现在我正在学习教程。谢谢你回答我。
  • @SuperUser 你能帮我吗,现在我正在使用编剧方法,现在我得到了 {referer:none},这意味着我什么也得不到。我该如何解决这个问题,你能帮我解决这个问题吗...?

标签: python web-scraping scrapy


【解决方案1】:

正如@SuperUser 告诉您的那样,蜘蛛得到None 是因为该站点使用Javascript 来呈现产品信息。如果您在浏览器中禁用 Javascript 并重新加载页面,您将看到产品未显示。

但是,您可以从 &lt;script&gt; 标记之一获取信息。

import scrapy
import json


class AlibabaSpider(scrapy.Spider):
    name = "alibaba"
    allowed_domains = ["alibaba.com"]
    search_value = "laptop"
    start_urls = [f"https://www.alibaba.com/trade/search?fsb=y&IndexArea=product_en&CatId=&tab=all&SearchText={search_value}"]

    def parse(self, response):
        raw_data = response.xpath("//script[contains(., 'window.__page__data__config')]/text()").extract_first()
        raw_data = raw_data.replace("window.__page__data__config = ", "").replace("window.__page__data = window.__page__data__config.props", "")
        data = json.loads(raw_data)

        title = data["props"]["offerResultData"]["offerList"][0]["information"]["puretitle"]
        yield {"title": title} # Laptops Laptop Cheapest OEM Core I5...

【讨论】:

  • 我试过了,效果很好,谢谢。但我是 scrapy 的新手,你能告诉我window.__page__data__config 是如何工作的吗,这是否适用于所有其他填充了 javascript 的网站
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2018-04-05
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
相关资源
最近更新 更多