Python提取HTML里的内容并解析——提取总页面数

通过所检索的url地址,找到总页数一栏,如:<span class="sui-pagination__total" tabindex="0" aria-label="Total 40 Pages">Total 40 Pages</span>,抽取总页数。

正则表达式提取总页数

考虑页数是个整数,可以用\d+表达式匹配当中的数字,代码如下:

python 复制代码
import re

page_count = 0
regex = r'\d+'
pagination_total_str = 'Total 40 Pages'
# 查找出对应的数字数组
match_arr = re.findall(regex, pagination_total_str)
# 第一个数字就是总页数
if match_arr[0].isdigit():
    page_count = eval(match_arr[0])
print(page_count)    

抽取页面的总页数信息

一开始想应用requests搭配BeautifulSoap提取页面数据,获得商品总数,但希音网站通过ajax手段加载完整页面,故不得不使用selenium+PhantomJS,完整加载页面后一次性获取全部内容再进行分析。

python 复制代码
# import requests
from selenium import webdriver
from bs4 import BeautifulSoup
import re

url = 'https://us.shein.com/pdsearch/shirt%20man/?ici=s1`RecentSearch`shirt%20man`_fb`d0`PageHome&search_source=1&search_type=all&source=historyWord&src_identifier=st%3D5%60sc%3Dshirt%20man%60sr%3D0%60ps%3D1&src_identifier_pre_search=&src_module=search&src_tab_page_id=page_home1720763711938'
# response = requests.get(url)
# content_text = ''
# page_count = 0
# if response.status_code == 200:
#     content_text = response.text
# if content_text:
#     soup = BeautifulSoup(content_text, "html.parser")
#     span = soup.find_all("span")
#     print(span)

def get_html(url):
    # driver = webdriver.PhantomJS(executable_path='./phantomjs-2.1.1-windows/bin/phantomjs')  # phantomjs的绝对路径,现在新版本的selenium废弃了此方法,需要2.48版
    driver = webdriver.Edge()
    driver.get(url)
    return driver.page_source

def get_total_page(html, regex=r'\d+'):
    page_count = 0
    soup = BeautifulSoup(html, 'html.parser')  # 用HTML解析网址
    tag = soup.find_all('span', attrs={'class': 'sui-pagination__total'})
    pagination_total_str = tag[0].decode_contents()
    # 查找出对应的数字数组
    match_arr = re.findall(regex, pagination_total_str)
    # 第一个数字就是总页数
    if match_arr[0].isdigit():
        page_count = eval(match_arr[0])
    return page_count

html = get_html(url)
get_total_page(html)
相关推荐
小徐不徐说6 小时前
序列化与反序列化:把 C++ 对象可靠地保存下来
开发语言·数据库·c++·php
ragnwang6 小时前
Notes: Python pybind11 import C++ module
开发语言·c++·python
王中阳Go6 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 搜索附近的功能概述和分析
java·开发语言·交友
骑着蜗牛撵大象3276 小时前
大模型 Agent 的沙箱护栏:gVisor 隔离、出口白名单与审计闭环
java·开发语言·jvm·安全·agent沙箱·gvisor·microvm
weixin_307779137 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
Dxy12393102167 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷7 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
云和数据.ChenGuang8 小时前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
nice_lcj5208 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试