如何爬取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日

相关文章

  • 网络爬虫的正则表达式

    0x00 re正则表达式     正则表达式:   通用字符串表达的框架 简洁表达一组字符串的表达式 针对字符串表达“简洁”和“特征”思想的工具   正则表达式在文本处理中的作用: 表达文本类型 同时查找和替换一组字符串 匹配字符串的全部或部分   正则表达式常用操作符:   正则表达式语法实例:     经典的正则表达式实例:   实例:匹配IP地址的正则…

    爬虫 2023年4月13日
    00
  • 如何解析Ajax异步加载的数据?

    网络爬虫在解析页面时,通常会使用BeautifulSoup、Scrapy等工具来进行解析,但这些工具通常只能解析HTML代码,无法解析使用Ajax异步加载的数据。因此,我们需要使用其他的方法来解析这些数据。 一种常用的方法是使用Selenium模拟浏览器行为,让浏览器先加载完所有的Ajax异步请求后,再进行解析。具体步骤如下: 安装Selenium库和浏览器…

    爬虫 2023年4月20日
    00
  • Python网络爬虫(http和https协议)

    一、HTTP协议概念   HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 二、HTTP工作原理   HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有…

    爬虫 2023年4月12日
    00
  • Python爬虫爬企查查数据

      因为制作B2b网站需要,需要入库企业信息数据。所以目光锁定企查查数据,废话不多说,开干!     #-*- coding-8 -*- import requests import lxml import sys from bs4 import BeautifulSoup import xlwt import time import urllib   de…

    爬虫 2023年4月11日
    00
  • 爬虫的cookie

    cookie 作用:保存客户端的相关状态 在请求中携带cookie,在爬虫中如果遇到了cookie的反爬如何处理? 手动处理 在抓包工具中捕获cookie,将其封装在headers中 应用场景:cookie没有有效时长且不是动态变化 自动处理 使用session机制 使用场景:动态变化的cookie session对象:该对象和requests模块用法几乎一…

    爬虫 2023年4月8日
    00
  • python爬虫-‘gbk’ codec can’t encode character ‘\xa0’ in position 134: illegal multibyte sequence

    UnicodeEncodeError Traceback (most recent call last) <ipython-input-95-45a7accf2da0> in <module> 1 fout = open(‘job_desc.txt’, ‘wt’) 2 for info in job_desc: —-> 3 …

    爬虫 2023年4月11日
    00
  • 微博关键词爬虫——基于requests和aiohttp

      requests库是python爬虫中最常见的库,与内置的urllib库相比,它更加简洁高效,是每一个接触爬虫者都务必要掌握的基础;但它也是有缺点的,就是不支持异步操作,虽然可以通过多线程来解决,但当需要发送大量请求时,创建大量的线程会浪费过多的资源;此时出现了一个新的库aiohttp,它是支持异步操作的,可以在一个线程中,通过异步多任务来实现快速发送请…

    爬虫 2023年4月11日
    00
  • python实现博客文章爬虫示例

    Python实现博客文章爬虫示例 简介 爬虫是指自动获取网站内容的一个程序或脚本,本文将介绍使用Python编写一个简单的博客文章爬虫。本文使用Python3.x版本。 准备工作 在编写爬虫之前,先了解几个Python库: requests:用于处理HTTP/HTTPS请求; BeautifulSoup:用于从HTML或XML文档中提取数据的Python库;…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部