Python爬虫实现JS写的翻页

目标网站:http://beijing.chineseoffice.com.cn/Template/office_complete.html

当查看网页源码时,没有各楼信息,实际写在JS里,包括翻页功能。

Chrome的developer tool查看网络包信息:

上代码:

url = "http://beijing.chineseoffice.com.cn/Building/GetbuildingList"
    
    for i in range(10): #总页数可以从翻页工具条中获得
        data = "page=%s" % str(i)
        listPage = requests.post(url,data=data) #实现翻页
        #以下非本文内容,用json解析获得的页面,取得build的id,拼成详细页link,访问详细页
        page = requests.get("http://beijing.chineseoffice.com.cn/Building/GetbuildingList")
        detail_page_link = "http://beijing.chineseoffice.com.cn/Template/office
<think>好的,用户想了解Python爬虫实现翻页功能的几种方法。我需要结合之前提供的引用内容来整理回答。首先,用户提到的引用中有两种方法:一种是直接构造URL列表,比如通过分析页码规律生成所有页面的链接;另一种是从页面中动态提取总页数,然后生成URL。这两种方法都是常见的翻页处理方式。 接下来,我需要回忆常见的翻页方法,确保覆盖主要的技术点。除了构造URL和动态提取页数,还有处理JavaScript加载的情况,比如使用Selenium或者模拟滚动。另外,有些网站使用POST请求分页,参数可能放在表单数据里,需要构造请求参数。还有可能需要处理AJAX请求,直接从接口获取数据。 然后,我要考虑用户可能的实际应用场景。比如,有些网站是简单的递增页码,有些是倒序,或者有其他复杂规律。动态页数提取适用于页面底部有分页控件的情况,而构造URL需要观察URL结构的变化。对于异步加载的内容,可能需要渲染页面或解析接口。 还要注意代码示例的正确性,确保使用正确的XPath或选择器来定位元素。比如引用1中通过XPath找到倒数第二个li元素来获取总页数,这在分页栏中常见。而引用2中通过分析URL规律,生成所有页面链接。 另外,可能需要提到反爬虫策略,比如设置请求头、使用代理、添加延迟等,但这些可能超出用户当前问题范围,不过翻页频繁容易触发反爬,所以简单提及注意事项也是有必要的。 最后,组织回答结构,分点说明每种方法,给出示例代码,并指出适用场景和注意事项。确保使用中文,行内公式正确,独立公式单独成段,不过这个问题可能涉及数学较少,但如果有分页计算的公式,比如总页数计算,可以用LaTeX表示。同时生成相关问题,帮助用户深入理解。</think>### Python爬虫实现翻页功能的常见方法 #### 1. **直接构造URL列表** 适用于URL包含明显页码规律的场景。例如搜狐新闻分页URL格式为`http://news.sohu.com/guojixinwen_5230.shtml`,页码按倒序递减排列[^2]。 ```python # 生成100页的URL示例 base_url = "http://news.sohu.com/guojixinwen_{}.shtml" start_page = 5230 end_page = 5132 urls = [base_url.format(i) for i in range(start_page, end_page-1, -1)] ``` #### 2. **动态提取总页数** 当页面底部显示总页数时,可通过XPath或CSS选择器提取。例如某汽车网站总页数位于分页栏倒数第二个`<li>`标签内[^1]: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("初始页面URL") pages = driver.find_element(By.XPATH, '//ul[@class="分页容器"]/li[last()-1]/a').text total_pages = int(pages) for p in range(1, total_pages+1): _url = f"https://example.com/index_{p}.html" driver.get(_url) ``` #### 3. **处理JavaScript动态加载** 若翻页通过AJAX/JavaScript实现,需分析网络请求或使用浏览器自动化工具。例如: ```python from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 模拟点击"下一页"按钮 next_button = driver.find_element(By.CSS_SELECTOR, 'a.next-page') next_button.click() # 或模拟滚动加载(如无限滚动页面) driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") ``` #### 4. **POST请求分页** 部分网站通过表单参数控制分页,需构造请求参数: ```python import requests params = { 'page': 2, 'items_per_page': 20 } response = requests.post('https://api.example.com/data', data=params) ``` #### 5. **API接口直接获取** 现代网站常通过JSON API分页,可直接解析接口数据: ```python import requests for page in range(1, 6): api_url = f"https://api.example.com/data?page={page}" data = requests.get(api_url).json() process_data(data) ``` --- ### 关键注意事项 - **反爬机制**:需设置`User-Agent`、`Referer`等请求头,添加`time.sleep(random.uniform(1,3))`模拟人工操作 - **页码边界**:需处理`page=0`或超出最大页数时的异常 - **动态内容**:若页面使用前端框架渲染,优先选择分析接口而非解析HTML ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值