需要用到对应市区县街道居委会的区域编码,于是找到统计局的网页,对这些数据进行抓取,用到了HtmlAgilityPack和ScrapySharp,由于也是第一次从网页抓取数据,所以对于HtmlAgilityPack和ScrapySharp的使用也是不熟悉,期间遇到了很多问题,在这里对其做下总结

对于HtmlAgilityPack和ScrapySharp的使用,在网上有大量的使用demo,不过看来看去基本都是同一篇,也不知道谁是原作者,这里附上天方的博文,demo就不抄了,附上链接,需要的可以在去看看

TianFang-使用ScrapySharp快速从网页中采集数据

这里的CSS选择器的用法很简单,跟我们写CSS对HTML元素做定位是一样的。由于统计局的网页内容如下图

一个table套一个table,连套四个,而我们抓取数据又不仅仅是抓取一个页面的内容,所以这里只能找统一的规律,最后直接用了简单粗暴的方法var divs = html.CssSelect("table table table table tr");//直接获取到最底层的table的tr

在取到对应的值后,又遇到个问题,抓取的数据无论是读出到控制应用台还是保存到文本中,读取到的中文都是问号,最终发觉是格式编码的问题,demo上的网页用的格式编码是utf-8,而ScrapySharp抓取的默认格式编码应该也是utf-8所以不会出现问题,而统计局这的编码格式是gbk2312,因为请求抓取数据没有使用正确的编码格式,所以导致抓取到的数据变成乱码。

正如前面所说,百度一搜基本都是天方的那一篇博文,根本没有一个提出类似问题的解决方案,而且ScrapySharp的使用文档也找不到,最后在一篇擦边的文章中找到了解决方法代码如下

var browser1 = new ScrapingBrowser { Encoding = Encoding.GetEncoding("gb2312") };//在定义抓取实体时,对其进行设置,之前一直在对抓取之后的内容进行编码转换,结果都没有任何作用,真正的转换是要在抓取之前对请求进行设置

至此网页内容的抓取基本是成功的了,于是开启程序开始让它抓取数据



但是在程序运行过程中遇到一个问题就是有时网络出现不稳定或者过于频繁访问该网站,导致报502错误,程序就会报异常,我的解决方法是用try catch去抓取网页内容,如果异常了这给内容赋空字符串,让它继续跑下去,这样就没有问题了,不过这个不算是一个好的解决方法,奈何目前能力有限,就只能这么用着先了

最新文章

  1. SSIS 数据输出列因为字符截断而失败
  2. android xml 常用控件介绍
  3. linux中socket的理解---4
  4. liveusb-creator
  5. Spring MVC 教程,快速入门,深入分析
  6. 网件无线网卡在windows 2012支持问题
  7. React用JS 模拟动画介绍
  8. ffmpeg的内部Video Buffer管理和传送机制
  9. Linux系统编程(15)——shell脚本语法
  10. linux 驱动入门2
  11. HTML友情链接代码
  12. .NET Framework基本概念
  13. 基于CDH5.12安装Kylin及官方用例测试
  14. 如何使用 Deepfakes 换脸
  15. MySql常用命令集Mysql常用命令5
  16. [ajaxupload] - 上传文件同时附件参数值
  17. 'basetsd.h': No such file or directory
  18. 校园网ipv6连接问题
  19. UT源码105032014098
  20. 《Redis设计与实现》学习笔记

热门文章

  1. opencv模板匹配查找图像(python)
  2. Hbase的极限测试经验之java项目的jar包导入
  3. Centos7.5 firewalld防火墙配置
  4. iOS keychain报错 25293
  5. Linux虚拟机添加硬盘
  6. 二十七、rsync同步工具
  7. sql server 重命名表名,字段名
  8. Caused by: java.io.FileNotFoundException: class path resource [../../resources/config/spring.xml] cannot be opened because it does not exist
  9. 整理汇总系统中空值的使用方法,后台+jsp
  10. UTF虚拟对象