js抓取网页内容(Python中的HTML生成内容内容介绍及解析)

优采云 发布时间: 2021-09-11 23:05

  js抓取网页内容(Python中的HTML生成内容内容介绍及解析)

  我们没有得到正确的结果,因为 javascript 生成的任何内容都需要在 DOM 上呈现。当我们得到一个 HTML 页面时,我们得到的是初始的、未修改的 DOM。

  因此,我们需要在抓取页面之前呈现 javascript 内容。

  由于在这个线程中多次提到 Selenium(有时是它的速度),我将列出另外两种可能的解决方案。

  解决方案 1:这是一个非常好的教程,我们将遵循这个教程。

  我们需要的是:

  Docker 安装在我们的机器上。在此之前,这是比其他解决方案更好的解决方案,因为它使用独立于操作系统的平台。

  按照相应操作系统中列出的说明安装 Splash。

  引用启动文件:

  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:如何从主机获取docker容器的IP地址? ):

  SPLASH_URL = 'http://localhost:8050'

  最后,您还需要设置这些值:

  DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

  最后,我们可以使用:

  在普通蜘蛛中,可以使用请求对象来打开网址。如果要打开的页面收录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 quote

  SplashRequest 将 URL 呈现为 html 并返回您可以在回调(解析)方法中使用的响应。

  解决方案 2:我们现在称之为实验(2018 年 5 月)。

  此解决方案仅适用于 Python 版本 3.6(目前)。

  你知道请求模块吗(谁不知道)?

  现在有了爬虫小哥:request-HTML:

  这个库旨在使解析 HTML(例如,爬网)尽可能简单和直观。

  安装 requests-html:pipenv install requests-html

  向页面的 URL 发出请求:

  from requests_html import HTMLSessionsession = HTMLSession()r = session.get(a_page_url)

  呈现响应以获取 Javascript 生成的位:

  r.html.render()

  最后好像提供了模块。

  或者,我们也可以试试记录的方法。使用美利糖和 r.html 刚刚呈现的对象。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线