python抓取js_Web-用Python抓取JavaScript页面

3449b83ad02b6830e4a3e4f0a976038d.png

宝慕林4294392

我们没有得到正确的结果,因为任何javascript生成的内容都需要在DOM上呈现。当我们获取一个HTML页面时,我们获取初始的、未经javascript修改的DOM。因此,我们需要在抓取页面之前呈现javascript内容。由于在这个线程中已经多次提到Selenium(有时还提到了它的速度),我将列出另外两个可能的解决方案。解决方案1:这是一个非常好的教程如何使用Scrapy爬行javascript生成的内容我们将遵循这一点。我们需要的是:码头工人安装在我们的机器里。在此之前,这是一个优于其他解决方案的解决方案,因为它使用的是独立于操作系统的平台。安装飞溅按照相应操作系统列出的指令执行。引用飞溅文件的话:Splash是一个javascript呈现服务。它是一个带有HTTPAPI的轻量级Web浏览器,使用Twisted和QT5在Python 3中实现。本质上,我们将使用Splash来呈现Javascript生成的内容。运行Splash服务器:sudo docker run -p 8050:8050 scrapinghub/splash.安装刮溅插件:pip install scrapy-splash假设我们已经创建了一个Scrapy项目(如果没有,我们来做一个),我们将按照指南更新settings.py:那就去你的项目吧settings.py并设置这些中间工具:DOWNLOADER_MIDDLEWARES = {

      'scrapy_splash.SplashCookiesMiddleware': 723,

      'scrapy_splash.SplashMiddleware': 725,

      'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,}Splash服务器的URL(如果使用Win或OSX),这应该是停靠计算机的URL:如何从主机获取码头集装箱的IP地址?):SPLASH_URL = 'http://localhost:8050'最后,还需要设置这些值:DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'最后,我们可以使用SplashRequest:在普通的蜘蛛中,您可以使用请求对象来打开URL。如果要打开的页面包含JS生成的数据,则必须使用SplashRequest(或SplashFormRequest)来呈现页面。下面是一个简单的例子:class MySpider(scrapy.Spider):

    name = "jsscraper"

    start_urls = ["http://quotes.toscrape.com/js/"]

    def start_requests(self):

        for url in self.start_urls:

        yield SplashRequest(

            url=url, callback=self.parse, endpoint='render.html'

        )

    def parse(self, response):

        for q in response.css("div.quote"):

        quote = QuoteItem()

        quote["author"] = q.css(".author::text").extract_first()

        quote["quote"] = q.css(".text::text").extract_first()

        yield quoteSplashRequest将URL呈现为html,并返回您可以在回调(解析)方法中使用的响应。解决方案2:我们现在称之为实验(2018年5月).此解决方案适用于Python版本3.6只是(目前)。你知道请求模块(谁不知道)?现在它有了一个爬行的小兄弟:请求-HTML:这个库旨在使解析HTML(例如,抓取Web)尽可能简单和直观。安装请求-html:pipenv install requests-html向页面的网址发出请求:from requests_html import HTMLSessionsession = HTMLSession()r = session.get(a_page_url)呈现响应以获取Javascript生成的比特:r.html.render()最后,模块似乎提供了刮擦能力.或者,我们也可以尝试记录在案的方法。使用美丽汤带着r.html我们刚刚呈现的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值