逆向分析爬取动态网页 绝大多数网站都会定时更新,不存在一种方式能爬取所有的网页信息,所以逆向分析方法不是一成不变, 但是核心要点是找到目标数据文件的url 可以从网页源码入手,或者network入手,或者其他方式,都可获取url
通过Python的requests库向指定URL发送GET请求,获取图书推荐列表的JSON数据,解析后提取每本书的ID和书名,并使用pandas库将数据整理成DataFrame表格,最终存储为UTF-8编码的CSV文件。
具体流程为:访问邮电出版社的API接口获取含图书标签的JSON响应,利用json模块将字符串转换为结构化数据,通过列表推导式取"bookId"和"bookName"字段,构建二维数据表并输出到"tmp/book.csv"文件中,实现从接口数据采集到结构化存储的自动化处理。
import requests
import json
import pandas as pd
url="https://www.ptpress.com.cn/recommendBook/getRecommendBookListForPortal?bookTagId=2725fe7b-b2c2-4769-8f6f-c95f04c70275"
rq=requests.get(url)
print(rq.text)
print(type(rq.text))
data=json.loads(rq.text) #把一个字符串加载成一个json格式的文件
print(data)
print(type(data))
book_id=[i['bookId'] for i in data['data']]
book_name=[i['bookName'] for i in data['data']]
book_info=pd.DataFrame({'book_id':book_id,'book_name':book_name})
book_info.to_csv('tmp/book.csv',index=False,encoding='utf-8-sig')
使用Selenium库爬取动态网页 特点:免费分布式的自动化测试 直接运行在浏览器中,就像真正的用户在操作一样 支持多平台,支持多浏览器 控制浏览器发布真实的http请求而不是模拟浏览器
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Edge() #打开Edge浏览器
driver.get('https://www.ptpress.com.cn') #访问指定网址
with open('tmp/page_source.txt','w',encoding='utf-8') as f:
f.write(driver.page_source) #driver.page_source是指当前访问的网页的网页源码
#driver.page_source获取的网页源码包含这个网页的所有内容
#requests.get获取的只有当前网页的内容
#windows=driver.window_handles #窗口,如果打开多个页面,可以用Windows进行查看
#driver.switch_to.window(windows[0]) #跳到第0个窗口,也就是第一个页面
"""
wait = WebDriverWait(driver, 20) # 设置等待时长
confirm_btn=wait.until(
EC.element_to_be_clickable( #元素可点击
(By.CSS_SELECTOR,'#newBook > div > div.l-news-title > a') #点击指定位置
)
)
confirm_btn.click() #点击操作
"""
#定位搜索框位置
search_btn=driver.find_element(By.CSS_SELECTOR,'#header > div > div.container.clearfix > div > div.search > input[type=text]')
search_btn.send_keys('Python网络爬虫')
wait = WebDriverWait(driver, 20) # 设置等待时长
confirm_btn=wait.until(
EC.element_to_be_clickable( #元素可点击
(By.CSS_SELECTOR,'#header > div > div.container.clearfix > div > div.search > img') #点击指定位置
)
)
confirm_btn.click() #点击操作
代码使用Selenium库自动化操作Edge浏览器,首先访问邮电出版社官网,将动态渲染后的完整网页源码保存到tmp/page_source.txt文件中;随后定位网页顶部的搜索框,输入关键词“Python网络爬虫”,通过显式等待机制确保搜索按钮可点击后触发搜索操作。整个过程实现了浏览器自动化控制、动态内容捕获(区别于静态请求库requests)及页面交互(如文本输入、按钮点击),适用于需要处理JavaScript渲染或模拟用户行为的网页数据采集场景,注释部分还保留了多窗口切换及元素点击的备用逻辑。
在使用selenium之前要先进行环境搭建,具体搭建过程可以参照selenium环境搭建