如何爬取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:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)

    一、requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起来比urllib更加简洁方便。   requests是第三方库,使用前需要通过pip安装。 pip install requests   1.基本用法: import requests #以百度首页为例 response = requests.get(‘ht…

    爬虫 2023年4月11日
    00
  • 爬虫9:Scrapy-获取steam网站前50页游戏的url

    第一步先确定下steam网站游戏的URLs http://store.steampowered.com/search/?page=1 把这个url作为我们的start_urls from scrapy.spiders import Spider from scrapy.selector import Selector class SteamUrls(Spid…

    爬虫 2023年4月11日
    00
  • 选择Python写网络爬虫的优势和理由

    选择Python作为网络爬虫的开发语言有如下优势和理由: 1. 易学易用 Python是一种非常容易学习和使用的编程语言。Python的语法简洁,可读性强,且具备丰富的内置库和第三方库,可以帮助开发者快速地实现网络爬虫的开发需求。 2. 丰富的网络爬虫库 Python拥有丰富的网络爬虫库,如Requests, beautifulsoup4, Scrapy等,…

    python 2023年5月14日
    00
  • python采用requests库模拟登录和抓取数据的简单示例

    下面我来讲解一下“Python采用requests库模拟登录和抓取数据的简单示例”: 1. 简介 requests库是一个Python第三方库,用于处理http请求,是Python开发中用的最为广泛的第三方库之一。我们可以利用requests模拟登录网站并抓取网站数据。 2. 环境准备 在使用requests模拟登录之前,需要安装requests库,安装命令…

    python 2023年5月14日
    00
  • 并发网络爬虫(C++实现)

    step1 使用socket编程技术,利用http协议,抽取网页中的url,实现简单的爬虫。 socketint socket (int domain, int type, int protocol)功能描述:初始化创建socket对象。socket返回值:成功返回非负数的socket描述符;失败返回-1。socket描述符是一个指向内部数据结构的指针,它指…

    爬虫 2023年4月11日
    00
  • 浅谈Python爬虫基本套路

    浅谈Python爬虫基本套路 关于爬虫 爬虫是指通过程序自动访问互联网资源,获取所需数据的一种技术手段。在信息爆炸的时代,利用自动化工具抓取大量数据并从中寻找自己需要的信息是一种非常重要的技术手段。 Python爬虫 Python可谓是轻巧、易上手的程序语言,也非常适合用于爬虫开发。它前端框架的便利性、运算速度和数据处理能力,让它成为了大家的首选。 爬虫的基…

    python 2023年5月14日
    00
  • 搞node爬虫–puppeteer–记一次大坑

    解决办法:升级node,然后重新下载puppeteer插件 设置淘宝镜像下载 npm config set puppeteer_download_host=https://npm.taobao.org/mirrors npm install puppeteer     问题:报错 (node:828) UnhandledPromiseRejectionWar…

    爬虫 2023年4月11日
    00
  • 笔记-爬虫部署及运行工具-scrapydweb

    笔记-爬虫部署及运行工具-scrapydweb   scrapyd是爬虫部署工具,但它的ui比较简单,使用不是很方便。 scrapydweb以scrapyd为基础,增加了ui界面和监控,使用非常方便。   2.      部署-scrapyd 使用scrapyd部署。 注意:在windows下无法部署,因为不能执行scrapyd-deploy命令。   2.…

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