背景:最近喜欢看百度贴吧,因为其内容大多都是吧友的真实想法表达等等原因。但是通过网页去浏览贴吧,始终觉得不够简介,浏览帖子的效率不高,自己就萌发了通过自己爬取贴吧感兴趣的关键字内容,自己写了个winform客户端,目前大致能浏览帖子了。
成果简陋:

总结:

这个我做的十分的简陋,没啥说的,我自己感觉,就解析dom节点比较费时,要观察网页,不同的贴吧名,搜索结果的展示dom节点是不一样的,所以要找到合适的xpath去解析想要的信息,用的库就是 HtmlAgilityPack,这个没有那种使用浏览器内核的库复杂,完成这种值爬取文字信息的我认为对我来讲是够用的了。
说起xpath的使用,其语法 分为单斜杠、双斜杠、中括号属性名查找。比如说:
/div[1]/div[2]就是从根开始匹配第一个div下面的第二个div子节点。用单斜杠我的理解是只能向dom一级一级的匹配。而双斜杠能从任意未知匹配,比如:
//div[@id="postContent_123"]表示查找dom节点中任意id为双引号内容的节点。使用时注意,如果时在某个自己点调用查找单个节点时,比如:
node.GetSingalNode("//div[@class=\"p_post\"]"),这个不会从node这个节点下面去找,依然是全文的dom查找。
 
获取html文档,可以使用这个包自带的HtmlWeb类,也可以自己写RequestHelper封装一下,注意网页编码,目前贴吧搜索页是gbk,帖子内容是utf-8。
这里还有个坑,帖子楼层下得回复消息是异步得,那么从获取html网页的方式获取不到这些回复,只会得到一张img的标签dom,但是通过F12查看,发现所有的回复都是一个请求返回的json,楼层的pid和json的回复对应。
newtownsoft.json 也有根xpath类似的语法,比较好定位某个属性的值。因为这个回复json有的关键属性是数字,所以我没有设计类去接收json字符,而是使用jsonobject。
 
这个贴吧有反爬机制,有图片验证,目前我还不能一次性永久解决,但短暂的办法,我的是加上cookie和userAgent,可以试试,在浏览器出现需要验证的情况去看看cookie,用排除法去找到关键的cookie。这个用上了,不久后又会需要验证,在更换哈cookie的值或者useragent的值就好了。如果用htmlWeb就没这么灵活了,用自己的请求类我觉得还是比较好点。
 
做的时候,为了调试方便,写单元测试是个不错的方法,不需要界面操作,可以提高效率。核心方法直接封装成一个类,直接调用方法就行,因为这个简单没啥界面的复杂交互,所以写单测也好写。
 
做界面设计渲染的时候,使用了自定义控件,flowlayoutpanel比panel要方便。主要是测试前,可以提前序列化一批真实的帖子数据,测试界面时,就使用序列化的静态数据,这样降低了触发验证的风险,也能加快效率。
 
最后这个做的很简陋,心头其实是害怕自己没能力再把这个程序做得更好,所以就没有再继续尝试优化了。

【C#】爬取百度贴吧帖子 通过贴吧名和搜索关键词的更多相关文章

  1. Python爬虫实例(一)爬取百度贴吧帖子中的图片

    程序功能说明:爬取百度贴吧帖子中的图片,用户输入贴吧名称和要爬取的起始和终止页数即可进行爬取. 思路分析: 一.指定贴吧url的获取 例如我们进入秦时明月吧,提取并分析其有效url如下 http:// ...

  2. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  3. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  4. Python爬虫实战之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...

  5. python爬取百度贴吧帖子

    最近偶尔学下爬虫,放上第二个demo吧 #-*- coding: utf-8 -*- import urllib import urllib2 import re #处理页面标签类 class Too ...

  6. 芝麻HTTP:Python爬虫实战之爬取百度贴吧帖子

    本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:http:// ...

  7. Python爬虫-爬取百度贴吧帖子

    这次主要学习了替换各种标签,规范格式的方法.依然参考博主崔庆才的博客. 1.获取url 某一帖子:https://tieba.baidu.com/p/3138733512?see_lz=1&p ...

  8. 利用python的爬虫技术爬取百度贴吧的帖子

    在爬取糗事百科的段子后,我又在知乎上找了一个爬取百度贴吧帖子的实例,为了巩固提升已掌握的爬虫知识,于是我打算自己也做一个. 实现目标:1,爬取楼主所发的帖子 2,显示所爬去的楼层以及帖子题目 3,将爬 ...

  9. 爬虫系列(六) 用urllib和re爬取百度贴吧

    这篇文章我们将使用 urllib 和 re 模块爬取百度贴吧,并使用三种文件格式存储数据,下面先贴上最终的效果图 1.网页分析 (1)准备工作 首先我们使用 Chrome 浏览器打开 百度贴吧,在输入 ...

  10. 百度图片爬虫-python版-如何爬取百度图片?

    上一篇我写了如何爬取百度网盘的爬虫,在这里还是重温一下,把链接附上: http://www.cnblogs.com/huangxie/p/5473273.html 这一篇我想写写如何爬取百度图片的爬虫 ...

随机推荐

  1. 【实变函数】四、Lebesgue积分

    [实变函数]4. Lebesgue积分 本文介绍Lebesgue积分的定义,并给出积分的一些常用性质.注意Lebesgue积分的定义是从非负函数向一般函数扩展的,这依托于一般函数的分解\(f(x)=f ...

  2. Copy 进阶用法

    Copy 进阶用法 本文出处:https://www.modb.pro/db/239809 copy 是最基础的导入导出命令,那么它有什么其他用法可以帮助我们更好地进行导入导出的工作呢? 关于导入方式 ...

  3. 【5】Spring IoC介绍

    有部分 Java 开发者对 IoC(Inversion Of Control)和 DI(Dependency Injection)的概念有些混淆,认为二者是对等的. IoC 其实有两种方式,一种就是 ...

  4. C++对象封装后的内存布局

    在C语言中,数据和数据的处理操作(函数)是分开声明的,在语言层面并没有支持数据和函数的内在关联性,我们称之为过程式编程范式或者程序性编程范式.C++兼容了C语言,当然也支持这种编程范式.但C++更主要 ...

  5. mysql 重新整理——逻辑架构[二]

    前言 在此简洁逻辑架构,mysql的基础逻辑架构其实和sql server很像的. 正文 首先是客户端,发起了连接. 然后呢连接池后那一块,就是有分析器的那一块,那一块是干啥的呢. 其实我们写的语句呢 ...

  6. 扩展中国剩余定理证明及例题 Strange Way to Express Integers

    前置知识 中国剩余定理(CRT),逆元: EXCRT是什么 我们知道,对于 对于 \[\begin{equation} \begin{cases} x \equiv c_1 \ (mod \ m_1) ...

  7. 【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG

    问题描述 看见一个有趣的页面,可以把输入的文字信息,直接输出SVG图片,还可以实现动图模式. 示例URL:  https://readme-typing-svg.demolab.com/?font=F ...

  8. HarmonyOS 性能优化

    如何合理使用动效来获得更好的性能 组件转场动画使用 transition: 推荐使用转场动画(transition)而不是组件动画(animateTo),因为 transition 只需要在条件改变时 ...

  9. 最简编译CockroachDB 21.2

    编译CockroachDB比较麻烦,尤其是从git下载代码编译还需要关联项目的下载,本文整理从官网下载代码的编译过程,非常简单,几乎没有异常,供大家参考. 编译CockroachDB 21.2 1.安 ...

  10. 07cj031,07CJ03-1图集免费下载

    简介 07CJ03-1轻钢龙骨石膏板隔墙.吊顶图集是中国建筑标准设计研究院组织编写的一部针对轻钢龙骨.石膏板材料用于非承重隔墙.室内吊顶装修的装修.建造参考资料,为用户提供专业的建造参考 下载 有需要 ...