采集黑马程序员论坛的帖子使用xpath
打开黑马程序员论坛的采集程序帖子列表页,按F12,黑马找到每个帖子标题所在的员论用标签,右键复制XPath——这事儿我干过不下五十次。坛的帖使但每次复制出来的采集程序路径都长得像 `/html/body/div[3]/div[2]/div[1]/ul/li[4]/a` 这种,换一页就废。黑马问题出在论坛的员论用DOM结构会随板块、置顶帖、坛的帖使广告位变化,采集程序绝对路径根本靠不住。黑马
真正能用的员论用XPath,得从帖子标题的坛的帖使共性特征入手。比如黑马论坛的采集程序帖子标题通常带 `class="title"` 或位于 `h3` 标签内,链接的黑马 `href` 包含 `/thread-` 这类固定片段。我一般会写成:
//a[contains(@href,员论用 '/thread-') and string-length(text()) > 5]/text() 这行XPath的意思是:找所有href里带“/thread-”且文本长度大于5的链接,提取文字。为什么加长度限制?因为论坛底部有“上一页”“下一页”这类短链接,不加过滤会混进来。实测下来,一页20个帖子,能准确抓到18-19个,漏掉的是纯图片帖或标题极短的。
用Python的lxml库跑一下:
from lxml import etree import requests url = 'https://bbs.itheima.com/forum-2-1.html' html = requests.get(url, headers={ 'User-Agent': 'Mozilla/5.0'}).text tree = etree.HTML(html) titles = tree.xpath('//a[contains(@href, "/thread-") and string-length(text()) > 5]/text()') for t in titles: print(t.strip()) 注意requests必须带User-Agent,否则黑马论坛会返回403。这个坑我踩过,当时以为是XPath写错了,查了半小时才发现是请求头问题。
翻页怎么办?论坛的分页链接通常是 `forum-2-2.html`、`forum-2-3.html` 这种规律。直接构造URL循环就行,比用XPath抓“下一页”按钮更稳。因为“下一页”按钮在最后一页会消失,XPath返回空列表,逻辑还得额外判断。
还有个细节:帖子标题里可能带换行符或多余空格。比如“【教程】 Spring Boot 入门”这种,直接输出会很难看。我习惯用 `''.join(t.split())` 压掉所有空白。另外,有些帖子标题被截断,末尾带“...”,这是论坛前端做的省略,XPath抓到的就是带省略号的文本,没法还原完整标题——除非点进详情页,但那样效率太低,采集列表页时我选择接受这个缺陷。
如果你要采集的不只是标题,还有作者、回复数、发布时间,那就得换策略。每个帖子的信息块通常在一个 `tbody` 或 `div` 里,用相对XPath从标题链接往上找父节点,再提取兄弟节点的文本。比如:
//a[contains(@href, "/thread-")]/ancestor::tbody[1]//text() 这样能把整个帖子行的所有文字都抓出来,再按换行和空格切分。但不同板块的表格结构不一样,技术交流区用 `tbody`,招聘区可能用 `div`。我的做法是写两套XPath,先试第一套,返回空就换第二套。别指望一个XPath通吃整个论坛。
最后说个观察:黑马论坛的帖子列表在未登录状态下只显示前10页,再往后就要求登录。所以采集深度有限,想抓全量得先搞定登录态,把Cookie带上。不过对于练手XPath来说,前10页足够跑通流程了。真正麻烦的从来不是XPath语法,而是页面结构变来变去——上周还能用的路径,这周论坛改版就失效了。所以写采集脚本时,把XPath单独抽成配置文件,改起来才不痛苦。
(责任编辑:热点)
-
周六早上七点四十分,我攥着手机站在医院B超室门口。屏幕上显示“已过号”,护士探出头来:“您约的是周四的号,今天周末只做急诊和住院部检查。” 这事不怪医院。我翻预约单时确实看到“周末仅限产前筛查”的小字
...[详细]
-
我见过太多被“网贷逾期处理”广告忽悠的人了。那些广告说交几千块“法务费”,就能帮你“停息挂账”,甚至“修复征信”。说实话,这里面九成是骗局,剩下的一成,也是你本来就能自己做的事,根本不用花钱。 先讲个
...[详细]
-
我见过太多独立站死在SEO这一步。不是产品不行,是根本没人搜得到。上周还有个做户外灯具的卖家跟我抱怨,广告费烧了三个月,自然流量还是个位数。我打开他的网站一看,产品标题写的是“LED camping
...[详细]
-
我见过太多人学数据分析,第一步就栽在“买书囤课”上。花了大几百块,看完第一章就放弃了——因为那些教材一上来就甩给你一堆统计学公式,跟天书似的。其实入门数据分析,根本不需要那么痛苦。 我的建议是,直接拿
...[详细]
-
2019年3月21日,江苏响水天嘉宜化工有限公司发生爆炸,78条生命瞬间消逝。事故现场方圆两公里内,厂房被夷为平地,周边民居的窗户玻璃碎成齑粉。事后调查发现,这家企业从2016年起就因环保问题被多次处
...[详细]
-
搜狗搜索的推广入口,说穿了就藏在两个地方:一个是浏览器地址栏下方的搜索框,另一个是手机上的搜狗输入法。前者是PC时代的遗产,后者是移动时代的暗门。 我每天打开电脑,Chrome浏览器默认搜索是Goog
...[详细]
-
嗨嗨工作室的cass插件,是我在测绘圈子里见过最“懂行”的一批工具。别的插件还在堆功能菜单,它已经在琢磨怎么让老测绘员少点两下鼠标了。 先说个具体场景。上个月处理一个1:500的地形图,甲方临时要求把
...[详细]
-
上个月我帮朋友维护一个小型电商网站,后台登录日志里突然多了一串来自海外的IP尝试记录。每天凌晨三点准时出现,每次尝试的密码都不一样。朋友说这网站月流水不到五万,应该没人惦记。结果一查,他用的还是三年前
...[详细]
-
JSP文件在服务器上跑不起来,八成是导入路径写错了。这事我见过太多次,新手把<%@ page import="java.util.*" %>当成万能钥匙,结果连自己写的类都导不进去。 先分
...[详细]
-
固结灌浆注入量受渗透率影响极大,这种影响不是线性的,而是呈指数级放大。我做过一个对比试验,同一批水泥浆液,渗透率10⁻³cm/s的岩层每米注入量约80kg,而渗透率10⁻¹cm/s的岩层直接飙到400
...[详细]

mysql数据库语句大全
图片上传网站
计算机网络技术 网络攻防与安全渗透
电子商务系统网络环境
