为什么 xpath 的 extract() 为锚元素的 href 属性返回一个空列表?



当试图提取位于以下URL上的锚固标签的href属性时,为什么要获得一个空列表:https://www.udemy.com/courses/courses/search/?src = ukw& q =使用砂纸会计?

这是我提取位于list-view-course-card--course-card-wrapper--TJ6ET类内的<a></a>元素的代码:

response.xpath("//div[@class='list-view-course-card--course-card-wrapper--TJ6ET']/a/@href").extract()

此站点进行API调用以检索所有数据。您可以使用废料壳来查看该站点正在返回的响应。 scrapy shell 'https://www.udemy.com/courses/search/?src=ukw&q=accounting',然后是view(response)

您要查找的数据可通过以下API调用提供:'https://www.udemy.com/api-2.0/search-courses/?fields [locale] = simple_english_title&amp; src = ukw&amp; q = accounting'。但是,如果您尝试直接访问此链接,您将获得一个JSON对象,说您无权执行此操作。我如何找到此链接?将URL加载到浏览器上,然后转到开发人员工具上的"网络"选项卡,然后查找XHR对象。

以下蜘蛛将首先向主链接提出请求,然后向API调用请求。您将必须解析返回的JSON对象以获取您的数据。如果您想将此蜘蛛缩放为更多产品,则可能需要在API调用的结构中寻找一种模式。

import scrapy
class UdemySpider(scrapy.Spider):
    name = 'udemy'
    newurl = 'https://www.udemy.com/api-2.0/search-courses/?fields[locale]=simple_english_title&src=ukw&q=accounting'
    def start_requests(self):
        urls = ['https://www.udemy.com/courses/search/?src=ukw&q=accounting'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.api_call)
    def api_call(self, response):
        print("Working on second page")
        yield scrapy.Request(url=self.newurl, callback=self.parse)
    def parse(self, response):
        #code to parse json object
`

最新更新