Python爬虫爬取动态JS网页股票信息

本文介绍了如何使用Python爬虫抓取动态JS网页中的股票信息。通过结合requests和BeautifulSoup库,分析JavaScript请求,找到数据源并修改参数来获取所需数据。在抓取过程中,遇到JavaScript动态加载数据的问题,最终通过分析HTTP请求解决。同时,文章分享了处理数据异常和提升抓取效率的经验。
摘要由CSDN通过智能技术生成
前期准备工作

在本例中使用的是python爬虫需要的两个基础的库,一个是requests库,另一个是BeautifulSoup库。在这里假设已经安装了这两个库,如果没有可以通过pip安装。接下来简单说一下两个库的作用,requests库的主要作用是通过url获取到服务器的前端代码数据,使用这两个库抓取的数据都是服务器的前端代码中的数据。而BeautifulSoup库主要用来从抓取到的前端代码中提取需要的信息。

数据抓取

本次抓取的数据的url为http://quote.eastmoney.com/center/gridlist.html#hs_a_board
建议使用谷歌或者火狐浏览器打开,可以使用快捷键CTRL+U查看服务器的网页源代码。在抓取数据之前需要对数据的格式有大概的了解,首先要抓取的数据必须是在源码中能找到的才能直接抓取到。相信有一点html语言基础的都能看懂个大概,要留意的是,我们可以在源码中看到script的标签,因为JavaScript是在网页加载时动态加载的,所以我们抓取到的源码也显示的是JavaScript的代码,而并非JavaScript加载出来的数据。所以我们在源码中是看不到股票的数据的。所以如果我们直接抓取requests库返回的代码数据,是抓取不到股票信息的。
在这里插入图片描述

解决方法

一种比较特殊的方法就是不直接从目标网站抓取数据,而是找到PC端发出的请求,更改get方法的参数在新的窗口打开请求的资源。通过更改请求参数可以让服务器返回不同的数据。这种方法需要对HTTP协议等原理有所了解。
具体方法是,在需要抓取的数据上右键选择检查,谷歌和火狐都是支持元素检查的。然后可以看到对应的数据在本地是存在的。选择network,选择下面的JS,然后刷新一次,就可以看到get方法的请求。
在这里插入图片描述
通过检查get方法得到的返回数据与前端页面对比,可以发现是一致的。可以直接选择右键鼠标在新的网页打开。但是此时返回的只有一部分数据,并非所有的数据,通过修改get方法的参数可以获取到所有的数据。在此处只修改了np=2即可,至于为什么修改这个参数这里不进一步讨论。修改后的请求如下:http://52.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112405554850877717066_1581422771754&pn=1&pz=20&po=1&np=2&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1581422771755
在这里插入图片描述
可以看到都是结构化的数据,我们直接进行数据抓取即可。可以利用正则表达式匹配对应的数据。我们第一次只能抓取到股票代码等简单的信息,详细的交易信息需要使用http://info.stcn.com/dc/stock/index.jsp?stockcode=’ + '股票代码’才能抓取到,我们同样使用这两个库重复这个过程就可以了,而且可以直接从源码中抓取到,不用再这么麻烦。下面直接上代码

import requests
from bs4 import BeautifulSoup
import re
finalCodeList = []
finalDealData = [['股票代码','今开','最高','最低','昨收','成交量','成交额','总市值','流通市值','振幅','换手率','市净率','市盈率',]]

def getHtmlText(url)
Python爬虫抓取淘宝等动态加载内容的网站通常会涉及到JavaScript渲染的内容,这时简单地发送HTTP请求可能无法获取完整数据。为了处理这类情况,你需要使用一些支持浏览器自动化或者模拟用户交互的技术,如Selenium、Pyppeteer等库。 1. **Selenium**:这是一个流行的WebDriver工具,它允许通过真实的浏览器环境控制来动态加载页面并抓取数据。首先,需要安装selenium库,然后通过webdriver(如ChromeDriver)驱动浏览器访问网站。 ```python from selenium import webdriver # 创建一个新的Chrome浏览器实例 driver = webdriver.Chrome() driver.get('https://www.taobao.com') # 等待页面加载完成 driver.implicitly_wait(10) # 找到动态加载的部分并提取数据 data_elements = driver.find_elements_by_css_selector('.dynamic-data') # 需替换CSS选择器 data = [element.text for element in data_elements] # 关闭浏览器 driver.quit() # 数据处理 # ... ``` 2. **Scrapy-Splash**:Scrapy框架的一个中间件,Splash是一个轻量级的HTTP渲染服务,可以让你的爬虫像浏览器一样请求动态加载的资源。在Scrapy项目配置中启用Splash,并指定相应的URL。 3. **Pyppeteer**:另一个基于Node.js的库,提供了一个类似Chrome DevTools的API,适用于生成HTML渲染后的PDF、屏幕截图,以及爬取动态网页。它的使用方法也类似Selenium,先启动一个隔离的浏览器进程,然后控制这个进程进行操作。 记得遵守网站的Robots协议,尊重版权,并确保你的爬虫行为不会对服务器造成过大压力。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值