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

yizhihongxing

网络爬虫爬取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日

相关文章

  • python3使用urllib模块制作网络爬虫

    Python3使用 urllib 模块制作网络爬虫的完整攻略如下: 1. 导入 urllib 库 在 Python 中,必须要先导入 urllib 库,才能使用其中的模块和函数。 import urllib.request 2. 打开网页 使用 urllib.request 模块中的 urlopen() 函数可以打开一个网页,返回的是一个类文件对象,可以通过…

    python 2023年5月14日
    00
  • Python爬虫,获取,解析,存储详解

    Python爬虫获取、解析、存储详解 准备工作 在开始爬虫之前,我们需要确保自己安装了以下两个库: requests:用于发送HTTP请求和获取响应数据 BeautifulSoup4:解析HTML/XML数据 安装方式,可以使用pip命令进行安装: pip install requests pip install beautifulsoup4 获取数据 在使…

    python 2023年5月14日
    00
  • 爬虫之性能相关

    在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢。 1、同步执行 import requests def fetch_async(url): response = requests.get(url) return response url_list = [‘http://www.github.co…

    爬虫 2023年4月12日
    00
  • python 爬虫下载英语听力新闻(npr news)为mp3格式

      想通过听实时新闻来提高英语听力,学了那么多年的英语,不能落下啊,不然白费背了那么多年的单词。 npr news是美国国家公共电台,发音纯正,音频每日更新,以美国为主,世界新闻为辅,比如最近我国武汉发生的新型冠状病毒肺炎,每天都有涉及China,Wuhan,Coronavirus等词。 自己动手丰衣足食,以前在网上下载的各种音频都是几年前的新闻,听着感觉没…

    爬虫 2023年4月13日
    00
  • python爬虫系列网络请求案例详解

    python爬虫系列网络请求案例详解 本教程将为您逐步展示如何使用Python进行网络请求并分析响应。我们将包括以下主题: 使用requests库发出GET请求 解析响应文本和内容 获取响应信息(状态码,头部信息等) 使用参数和headers定制请求 发出POST请求并解析响应 使用代理进行网络请求 1. 使用requests库发出GET请求 最常见的网络请…

    python 2023年5月14日
    00
  • 如何实现分布式爬虫?

    实现分布式爬虫需要以下几个步骤: 确认需求:首先需要明确爬取的目标网站,并确定需要爬取的内容及其对应的网页结构。 设计分布式架构:根据需求设计分布式架构,可以选择使用什么类型的分布式计算框架,如Spark、Hadoop、Storm等。考虑数据存储、任务调度、节点通信等方面,并确定主节点和从节点。 编写代码:根据设计,编写代码实现分布式爬虫任务。主要工作包括:…

    爬虫 2023年4月20日
    00
  • 爬取的数据如何清洗?

    要对爬取的数据进行清洗,通常需要进行以下几个步骤: 了解数据结构和格式 在进行数据清洗之前,先要了解数据的具体结构和格式。可以使用Python中的各种包或工具,如Pandas、BeautifulSoup等,查看数据的格式,例如数据的字段、数据类型、缺失值等。 清洗数据 接下来,需要针对具体数据结构,对数据进行清洗,包括去重、去除特殊字符、缺失值处理、类型转换…

    爬虫 2023年4月20日
    00
  • Python爬虫一步步抓取房产信息

    嗯,这一篇文章更多是想分享一下我的网页分析方法。玩爬虫也快有一年了,基本代码熟悉之后,我感觉写一个爬虫最有意思的莫过于研究其网页背后的加载过程了,也就是分析过程,对性能没有特殊要求的情况下,编程一般是小事。 以深圳地区的X房网为例吧。XX房网的主页非常简洁,输入相应的地区就可以找到对应的二手房或者一手房。这一篇文章主要就给大家介绍我在做XX房网爬虫的分析过程…

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