背景:最近喜欢看百度贴吧,因为其内容大多都是吧友的真实想法表达等等原因。但是通过网页去浏览贴吧,始终觉得不够简介,浏览帖子的效率不高,自己就萌发了通过自己爬取贴吧感兴趣的关键字内容,自己写了个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. HMS Core Discovery第15期直播预告|构筑立体世界,共造沉浸式营销

    [导读] AR技术,是一种将真实世界信息和虚拟世界信息"无缝"衔接的技术,现如今AR技术受到日益广泛的关注,在我们生活中发挥着重要的作用,并显示出巨大的潜力--它是如何改变我们观察 ...

  2. "鸿蒙生态专家面对面"三月专场等你前来!

  3. Lattice高速下载器HW-USBN-2B 如何申请 license

    如果用的芯片不是停产老旧芯片,Diamond programmer 是不需要 license 绑定支持的. 但是有些需要编程老旧的芯片.需要安装 Diamond programmer stand-al ...

  4. 10个常用的JS工具库,80%的项目都在用

    高手区别于普通人的重要一点是,他们善于利用工具,把更多的时间留给了规划和思考.写代码也是同样的道理,工具用好了,你就有更多的时间来规划架构和攻克难点.今天就给大家分享一下当前最流行的 js 工具库,如 ...

  5. Node 中的 Process 理解,有哪些常用方法?

    一.是什么 process 对象是一个全局变量,提供了有关当前 Node.js进程的信息并对其进行控制,作为一个全局变量 我们都知道,进程计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础, ...

  6. esp8266,arduino,网页显示dht11温湿度,控制继电器开关,局域网智能家居

    不说了,上代码,用arduino实现esp8266代码 #include <ESP8266WiFi.h> #include <WiFiClient.h> #include &l ...

  7. 力扣744(java&python)- 寻找比目标字母大的最小字母(简单)

    题目: 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时,字母是依序循环出现的.举个例 ...

  8. 力扣745(java&python)-达到终点数字(中等)

    题目: 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 你可以做一些数量的移动 numMoves : 每次你可以选择向左或向右移动.第 i 次移动(从  i == 1 开始,到 i ...

  9. 即学即会 Serverless | 初识 Serverless

    简介:Serverless 架构被越来越多的业务所采纳,成为其技术选型,大多数开发者已经跨越对 Serverless 概念了解,切实向落地实践出发.本文带大家一探究竟,为什么说 Serverless ...

  10. 使用MaxCompute LOAD命令批量导入OSS数据最佳实践—STS方式LOAD开启KMS加密OSS数据

    简介: MaxCompute使用load overwrite或load into命令将外部存储的数据(如:oss)导入到MaxCompute前的授权操作. MaxCompute使用load overw ...