网站爬取数据 网页爬取及数据处理python

论文讨论了在使用beautifulsoup爬取动态加载内容网站(如binance p2p)时,因javascript渲染导致无法获取预期html数据的文章常提供一种高效专业的提供解决方案:通过分析浏览器打开图像来自: ondata,并结合python的请求库和pandas库进行数据处理,从而稳定地抓取目标信息。动态网页抓取的挑战
进行网络数据抓取时,传统的HTML解析库如BeautifulSoup在处理静态网页时表现。然而,出色的是,当目标网站采用JavaScript动态加载内容时,仅依赖请求库获取的初始HTML往往不包含用户在浏览器中是在浏览器执行JavaScript代码后才被渲染到DOM中的。尝试使用BeautifulSoup解析此类初始HTML,样式定义(lt;s;s) tylegt:根据的HTML元素。识别并利用网站API解决动态网页爬取问直接与网站进行数据交互。许多现代网站通过API(应用程序接口)提供数据,这些API通常返回JSON格式的格式化API: API: 打开目标网页(例如,Binance P2P "Network" (Network) 寻找类型为 XHR(XMLHttpRequest)或 Fetch 的请求。这些通常是 JavaScript 用于从服务器异步获取数据的请求。分析请求详情:点击可疑的请求,查看其“Headers”(请求头)、“Payload”(请求体)和“Response”(响应)。请求 URL: 描述:通常是 GET 或 POST。对于 POST 请求,需要注意请求体中的数据格式和内容。请求头:图片:User-Agent, Content-Type, Accept-Language: 一旦确定了API端点、请求方法、请求头和请求体,就可以使用Pytho n的请求库来模拟这些请求。pandas库则非常适合处理返回的JSON数据,特别是通过json_normalize函数将其格式化为DataFrame。 以下是一个具体的示例,展示如何从币安 P2P 获取交易数据: 立即学习“Python免费学习笔记(深入)”;怪物AI数字人 数字人短视频创作,数字人直播,实时驱动数字人 44 查看详情 import requestsimport pandas as pdimport json# requests.Session()# 定义请求头,模拟浏览器行为headers = { 'content-type': 'application/json', # 明确告诉服务器发送的是JSON数据'accept-language': 'en-US,en;q=0.9', 'User-Agent': quot;Mozilla/5.0 (Windows NT 10.0;Win64; x64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/104.0.0.0 Safari/537.36quot;}#定义POST请求的JSON负载(请求体)#payload_data = { quot;proMerchantAdsquot;: False, quot;pagequot;: 1, quot;rowsquot;: 10, quot;payTypesquot;: [], quot;countriesquot;: [], quot;publisherTypequot;: None, quot;assetquot;: quot;USDTquot;, quot;法币quot;: quot;RUBquot;, quot;tradeTypequot;: quot;BUYquot;}#将Python字典转换为JSON字符串payload = json.dumps(payload_data)#定义API的URLurl = 'https://p2p.bi nance.com/bapi/c2c/v2/Friendly/c2c/adv/search'#更新会话的请求头s.headers.update(headers)#发送POST请求#数据参数用于发送原始的请求体数据(如JSON字符串)r = s.post(url,data=payload)#检查请求是否成功if r.status_code == 200:#解析JSON响应 json_response = r.json()# df= pd.json_normalize(json_response['data']) # 打印DataFrame的前几行 print(df.head())else: print(fquot;请求失败,状态码: {r.status_code}quot;) print(fquot;响应内容: {r.text}quot;)登录后复制 代码解析:requests.Session():创建一个会话对象,可以跨多个请求自动处理cookies,并保headers: 字典形式的请求头,包含了Content-Type(指定请求体为JSON格式)和User-Agent(模拟浏览器身份)。payload_data:下载Python例如,USDT、RUB、购买类型等)。json.dumps(payload_data):Requests.post(url) data=payload):发送POST请求。用于发送请求体数据的数据参数。r.json():下载Python字典或列表。pd.json_normalize(json_response['data']): json_normalize是Pandas中的一个强大的函数,用于将半格式化的JSON数据(特别是包含格式化列表和字典的)转换为纸张的表格结构DataFrame。 esponse中键为'data'的部分进行处理。数据处理与分析 通过pd.json_normalize,API返回的复杂数据JSON被转换成一个易于操作的Pandas DataFrame。数据框。数据框。数据框。数据框。 ser.nickName)清晰地表示了结构。现在,你可以利用Pandas 例如,要获取价格和交易量信息,可以直接访问相应的列:#假设df是上面代码生成的DataFrameif 'adv.price' in df.columns and 'adv.surplusAmount' in df.columns:prices_and_amounts = df[['adv.price', 'adv.surplusAmount', 'advertiser.nickName']] print(quot;\n价格和剩余数量:quot;) print(prices_and_amounts)登录后复制事项注意与最佳实践动态网站复杂性:Web Socket、GraphQL或更复杂的机制。反爬机制:网站可能会实现各种反爬机制,如IP限制、验证码、请求频率限制等。在实际爬取时,User-Agent轮换:使用fake_useragent库动态生成随机的User-代理:一定要添加健壮的错误处理机制,例如检查请求响应的状态码,处理JSON解析错误等。遵守规则: 在进行网络爬取时,应始终遵守目标网站的robots.txt协议和使用条款。过度或恶意爬取可能导致法律问题或IP被封禁。API变更:网站的API可能会随着时间的推移而改变,导致爬虫失效 当面对JavaScript动态加载内容的网站时,传统的BeautifulSoup HTML: HTML: Python的requests库进行请求发送,以及pandas.json_normalize进行JSON数据处理,可以构建出强大且专业的网络爬虫,有效应对现代网页的复杂性。 以上就是应对动态网页爬取挑战:从HTML解析到API数据获取的Python实践内容的详细内容,更多请关注乐哥常识网其他相关文章相关!标签: javascript python java html js 前端 json windows cookie 网络爬虫 Python JavaScript graphql json html beautifulsoup pandas 数据类型 Session 字符串 接口 对象 dom 异步 p2p websocket 大家都在看: JavaScript:DOM操作与模板字面量详解JavaScript化实践最佳JavaScript动态设置CSS left属性实现元素随机定位教程 JavaScript实现文本打字机效果与交互控制:何时触发“下一段”?
