如何爬取JavaScript动态生成的内容?

网络爬虫爬取JavaScript动态生成的内容的过程可以分为以下几步:

  1. 确定目标和需求:首先,需要明确想爬取的具体内容,并明确它的来源和访问方式,例如某个网页、某个API 或者某个特定的功能等等。

  2. 分析网页结构:浏览器可以直接执行 JavaScript 代码,但是爬虫并不具备这个能力,必须分析 JavaScript 代码,了解其实现的功能以及调用方式,并解析网页结构中包含的关键信息。谷歌浏览器提供了查看浏览器调用的开发者工具,其中 Network、Console、Elements 分别提供了网络请求、JavaScript 执行结果与页面结构信息。

  3. 模拟浏览器请求:通过分析前面分析得到的 web 页面中包含的 network 请求,分析比较常用的一些请求方式,如 GET、POST 请求,查找请求头和响应头,模拟网络请求,并在请求中添加需要的参数或者信息。

  4. 解析 HTML 解析 Dom 树:模拟网络请求构造了请求之后,返回的响应信息不管是文本还是 HTML,其内容包含关键信息大概率是在 HTML 中。解析 HTML 获取关键信息,比较流行的有: Beautifulsoup、pyQuery 等。

以下是两个示例说明:

示例 1: 使用selenium库爬取淘宝商品信息

Selenium 可以模拟真实操作,可以打开浏览器,操作页面,等待数据加载,获取JS渲染的数据。使用命令“pip install selenium”安装该Python库,示例代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()

# 访问淘宝网,并输入草莓
browser.get("https://www.taobao.com")
input = browser.find_element(By.XPATH, '//input[@id="q"]')
input.clear()
input.send_keys("草莓")

# 点击淘宝搜索
search_btn = browser.find_element(By.XPATH, '//button[@class="btn-search"]')
search_btn.click()

# 显示特定商品信息
goods = browser.find_elements(By.XPATH, '//div[@class="items"]/div')
for good in goods:
    print(good.text)

browser.close()

示例 2:使用Splash爬取通过Ajax获取的内容

Splash 是一个基于 WebKit 的 JavaScript 框架,可以实现 JavaScript 的异步请求,类似于浏览器。使用命令“docker pull scrapinghub/splash”下载 Docker 镜像,使用“docker run -p 8050:8050 scrapinghub/splash”启动 Docker,示例代码如下:

import requests

# 启动 Splash
splash_url = 'http://localhost:8050/render.html'
headers = {'content-type': 'application/json'}
lua_script = '''
function main(splash)
  assert(splash:go(splash.args.url))
  assert(splash:wait(0.5))
  local elem = assert(splash:select('#resultDiv .result'))
  return {html=elem:html()}
end
'''

# 访问人人网搜索接口,渲染JS内容
url = "http://www.renren.com/Search.do"
params = {'do': 'search', 'q': 'selenium'}
resp = requests.post(splash_url, json={'lua_source': lua_script, 'url': url})
print(resp.content.decode('unicode_escape'))

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何爬取JavaScript动态生成的内容? - Python技术站

(0)
上一篇 2023年4月20日
下一篇 2023年4月20日

相关文章

  • python 爬虫 基本库使用urllib之urlopen(一)

    urllib是python内置的请求库。它主要包含四个模块: request :是最基本的HTTP请求模块,可以用来模拟发送请求。 error:异常处理模块,如果请求出现错误,可以捕获异常,然后进行其他操作,保证程序不会意外终止。 parse:工具模块,提供了很多URL处理方法,比如拆分、解析、合并等。 robotparser:主要用来识别网站的robots…

    爬虫 2023年4月11日
    00
  • Python利用Xpath选择器爬取京东网商品信息

    Python利用Xpath选择器爬取京东网商品信息 简介 本文主要介绍如何使用Python的Xpath模块实现京东网商品信息的爬取。Xpath是一种支持路径选择的查询语言,常用于处理XML、HTML以及其他结构化文档的数据。本文将使用Python的Xpath模块和requests模块对京东网的商品信息进行爬取。 前提条件 在开始本文之前,请确保您已经安装了以…

    python 2023年5月14日
    00
  • Python网络爬虫(数据解析-re模块)

    一、实现数据爬取的流程   指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储   在持久化存储之前需要进行指定数据解析。因为大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据。  二、常用正则表达式回顾   单字符: . : 除换行以外所有字符 [] :[aoe]…

    爬虫 2023年4月12日
    00
  • 爬虫必备—scrapy-redis(分布式爬虫)

    转载自:http://www.cnblogs.com/wupeiqi/articles/6912807.html scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler – 调度器 dupefilter – URL去重规则(被调度器使用) pipeline   -…

    爬虫 2023年4月12日
    00
  • Python爬虫-破解有道词典(破解MD5的JS加密算法)

    破解有道词典 1.进行普通爬取尝试: 1 ”’ 2 破解有道词典 3 V1 4 ”’ 5 6 from urllib import request, parse 7 8 9 def youdao(key): 10 11 url = “http://fanyi.youdao.com/translate_o?smartresult=dict&smar…

    爬虫 2023年4月11日
    00
  • Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫

    使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 04 我使用的 urllib 的版本:urllib2 注意: 我没这里使用的是 Python2 ,而不是Python3 一 . 简介 编写网络爬虫的第一步就是下载网页,这个过程叫做: 爬取 。 …

    爬虫 2023年4月13日
    00
  • 如何设置爬虫的速度?

    设置爬虫的速度是合理使用爬虫的重要一环,可以防止对被爬取的网站造成过多的压力,同时也可以提高爬取效率。下面是详细的设置爬虫速度攻略: 1. 设置requests库的超时时间 在使用requests库访问网页时,可以通过设置timeout参数来控制访问超时时间。如果超时时间过长会降低效率,如果时间太短可能会导致访问失败。推荐将timeout设置为3-10秒之间…

    爬虫 2023年4月20日
    00
  • 网络爬虫的数据获取方式有哪些?

    网络爬虫是一种通过自动化程序定期抓取网站数据的技术,它可以快速获取大量网站上的数据,并按照用户需求进行整理、分析和处理。网络爬虫的数据获取方式主要有以下几种: 静态页面爬取 静态页面是指页面内容不会被动态修改的网页,它们通常是由HTML和CSS代码组成,不包含动态脚本或交互式内容。网络爬虫可以通过HTTP协议发送请求并获取网页内容,然后解析HTML代码,从中…

    爬虫 2023年4月20日
    00
合作推广
合作推广
分享本页
返回顶部