如何使用刮花和飞溅抓取leetcd

2024-04-28 16:51:05 发布

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

我是Python和蜘蛛的新手。我现在尝试使用Scrapy和Splash来抓取js呈现的动态页面,比如从https://leetcode.com/problemset/all/抓取问题。在

但当我使用响应.xpath(“//div[@class='css-1ponsav']”)在https://leetcode.com/problems/two-sum/中,似乎没有获取任何信息。 类似地,在登录接口https://leetcode.com/accounts/login/中,当您尝试调用SplashFormRequest.from_响应(response,…)要登录,它将返回值error:No element found in<;200>;。在

我对前端不太了解。我不知道是否与LeetCode使用的graphQL有关。或者其他原因?在

这是密码。在

# -*- coding: utf-8 -*-
import json
import scrapy
from scrapy import Request, Selector
from scrapy_splash import SplashRequest
from leetcode_problems.items import ProblemItem


class TestSpiderSpider(scrapy.Spider):
    name = 'test_spider'
    allowed_domains = ['leetcode.com']

    single_problem_url = "https://leetcode.com/problems/two-sum/"

    def start_requests(self):
        url = self.single_problem_url
        yield SplashRequest(url=url, callback=self.single_problem_parse, args={'wait': 2})

    def single_problem_parse(self, response):
        submission_page = response.xpath("//div[@data-key='submissions']/a/@href").extract_first()
        submission_text = response.xpath("//div[@data-key='submissions']//span[@class='title__qRnJ']").extract_first()
        print("submission_text:", end=' ')
        print(submission_text) #Print Nothing
        if submission_page:
            yield SplashRequest("https://leetcode.com" + submission_page, self.empty_parse, args={'wait': 2})

Tags: fromhttpsimportselfdivcomurlsubmission
1条回答
网友
1楼 · 发布于 2024-04-28 16:51:05

我不太熟悉Splash,但是98%的Javascript生成的网站可以通过查看Network选项卡下的XHR过滤器来获取生成这些输出的POST或GET响应。在

在您的例子中,我可以看到有一个响应可以生成整个页面,而不需要任何特殊的查询参数或API键。在

相关问题 更多 >