首页 新闻 会员 周边

用c#抓取网页上的数据导入excel中

0
悬赏园豆:200 [已解决问题] 解决于 2017-11-14 08:19

使用winform,点击按钮抓取数据,https://www.autohome.com.cn/hefei/这个网页中有个找车的检索框,就是抓取里面车品牌,车型,车系的数据,将抓取的数据导入excel表格中,作业题,没有思路求大神帮助,谢谢

c#
HelloWorld丶的主页 HelloWorld丶 | 初学一级 | 园豆:3
提问于:2017-11-13 13:39
< >
分享
最佳答案
1

抓取无非就是各种http请求咯,抓取完成后的分析数据无非就是你预先对数据的分析后用各种字符串处理截取相关信息。导入excel手段很多,可以把excel看成一个数据源导入(写sql语句,简单)也可以剑走偏锋使用excel的组件来处理(复杂)。当然还有就是你肯定不是一个线程在奋斗,而且为了避免卡死ui线程,这里也可以有很多玩法,还有你既然可以点按钮开始那么就同样涉及到点按钮结束。。。。。然后还要考虑各种异常情况,如果http请求响应超时了,如果excel文件被锁定(被其他地方打开)等等。

建议你是先从最核心的http请求到解析这块做起。

收获园豆:50
Daniel Cai | 专家六级 |园豆:10424 | 2017-11-13 13:50

学渣一枚,概念很模糊,有相关代码吗?谢谢

HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-13 13:52

@HelloWorld丶: 这个是你作业题你还是自己想办法做吧,只能告诉你哪些点,这个是你的作业,如果连代码都给你了,你以后毕业了怎么搞?

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-13 14:19

@Daniel Cai: 怎么用各种字符串处理截取相关信息啊

HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-13 17:03

@HelloWorld丶: 比如一个html节点<a href='xxx' >hello world</a>这样的东西你想截取中间的hello world你有若干种方式

1.正则匹配

2.依次读取字符判断截取范围,这个对算法要求高点,比如碰到一些不规则的节点可能就比较头疼

3.使用一些工具,假设html完全完整,可以直接使用xml dom进行查询

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-13 18:06

@HelloWorld丶: 另,http请求的信息你可以装个fiddler或者各浏览器自带的http请求记录的工具来进行分析,确认请求方式(get,post或者其他),确认请求参数,cookie的什么先不用关心,就裸着原始搜索关键字试下(强烈建议用fiddler来测试,里面模拟post,get,发送什么信息,重放都可以做到),然后观察是否能拿到结果,在什么情况下拿不到结果(有些网站为了反爬虫会做各种策略,从简单的ip策略到调用次数,这块没细研究过),然后一点点的叠加,最后直到拿到正确结果。

拿取车详情信息的时候类似,也需要分析请求参数中哪些才是用于定位的(很多参数实际不是必须的,甚至有些只是用于统计用户习惯啥的)。

反过来说你的需求,抓取车的数据需要从这个搜索框走么?汽车之家貌似有个完整的a到z的车列表页面,那个里面拉取不是更爽快?

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-13 18:29

@Daniel Cai: 那个下拉框是联动的,没有办法直接获取

HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-14 09:22

@HelloWorld丶: 联动下拉框只是一个ui层面的东西,你不要关心这些,你关心的是提交的信息。

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-14 09:25
其他回答(4)
1

页面打不开啊。。。

你首先要考虑几个方面

1、怎么获取页面?

这个获取简单,去百度一下C#发送http请求。如果需要登录或者授权,就在Http请求头部加上票据就好。

2、如何获得的页面怎么分析?怎么抓取?

你完全可以把返回的页面当作一个很长的字符串。最简单的方法是采用正则表达式抓取。如果页面上有异步加载,就考虑直接对他的异步接口进行访问。

3、怎么写入Excel?

写入Excel的方法太多了。例如最简单的本地就可以直接引用Office的组件,服务器的话,不怕被查水表也可以装Office。如果怕被查,那就用Open Office也简单多。还有一大堆三方的工具,例如AccessDb之类的。教程自行度娘。

4、优化效率和容错

啊,什么请求失败,重启发送请求啊,什么Excel的读取锁。什么任务列队啊,什么多线程啊。方法很多,其实你都没必要考虑到这一步。先把上面的弄完

收获园豆:50
写代码的相声演员 | 园豆:517 (小虾三级) | 2017-11-13 14:00

页面就是汽车之家的首页,你看看,抓取的是找车那一块combobox里的所有数据,谢谢,好像还有难点

支持(0) 反对(0) HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-13 14:06

@HelloWorld丶: 

你没发现你是合肥,链接的地址里都写了么。你把这个都粘出来,其他人地区的人,自然没法直接根据你的网址访问。例如我的访问链接就是 https://www.autohome.com.cn/beijing/ 看出来了么

还有不要伸手就要代码,这个习惯很不好,先自己动动脑子,百度一下。

获取页面:【C#】Http发送Get&Post请求

分析页面:这个去百度一下正则吧,再不行就把获取到的页面,作为你前端打开,然后用JS通过标签抓。再往后台发。

写入Excel: C# Window编程随记——第三方读取Excel表格数据的插件(NPOI.dll)

如果你连这个脑子都不想动,看见有点难就打算做伸手党,我真心不建议你入程序员这一行。

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2017-11-13 14:23

@写代码的相声演员: 额,还在学习基础,老师突然要这个,涉及的几个点都不懂,我一下写不出来,不知道该怎么入手。我还是挺喜欢编程的啊

支持(0) 反对(0) HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-13 14:30

@HelloWorld丶: 你说你老师要,我想先问问你现在上大几?还是研究生?

如果老师要,无非两种,要不就是老师讲过,要不就是给你个学习方向。你大可以去问他,如果他都不会还给你提这种需求,你可以当面骂他SB,至少我就这么骂我的毕设老师。

抛开你的老师,工作中,各种变态的产品经理总会抛给你各种奇葩的需求。那所有人都说一下做不出来然后出来当伸手党么?可以伸手,但看你要的什么,要思路很好,要代码跟要饭没啥区别。

电影《火星救援》最后,男主说的一句话:

“You just begin. You do the math. You solve one problem, and you solve the next one, and then the next. And If you solve enough problems, you get to come home”

你需要开始工作,算算数,当你解决完一个问题,再去解决下一个问题,以及下一个,当你解决足够多的问题的时候,你就能回家了。

你现在遇到了一个巨大的问题,OK。有人来帮你把问题拆分成了无数个方向的小问题,你需要做的就是弄懂每个问题,懂了一个就再看下一个,当你解决了足够多的小问题,再回头看看,你的大问题也就解决了。

支持(0) 反对(0) 写代码的相声演员 | 园豆:517 (小虾三级) | 2017-11-13 14:56

@写代码的相声演员: 谢谢,受教了

支持(0) 反对(0) HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-13 14:59
1

https://www.cnblogs.com/ceachy/articles/CSharp_Retrive_Page_Document.html

参考一下这个,获取网页后扣里面的数据就简单了。正则,xml等都可以

收获园豆:20
龙葛格 | 园豆:782 (小虾三级) | 2017-11-13 14:05
0

博主的需求和我之前的需求差不多,你可以看我写的这个:https://pan.baidu.com/s/1miegFk0

收获园豆:50
大师兄丶 | 园豆:843 (小虾三级) | 2017-11-13 16:04

谢谢你,确实很像,我这边获取页面数据和导入到excel都写好了,现在筛选出信息有点难度,都说用正则,感觉老师用的不是正则,用什么方法分类出信息啊

支持(0) 反对(0) HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-13 16:57

@HelloWorld丶: XPath

支持(0) 反对(0) 大师兄丶 | 园豆:843 (小虾三级) | 2017-11-14 08:54
1

鉴于你新手,直接webbrowser里面有操作dom的接口。

至于操作xml方法同样很多,新手就用dataset之类的吧。

什么是dom——你可以理解为一个个的html标签对象。

比如你可以找到button,然后调用click,然后你得到网页去里面挨到挨到找你需要的dom对象即可。

收获园豆:30
花飘水流兮 | 园豆:13560 (专家六级) | 2017-11-13 16:32

我现在就是用的webbrowser,标签都出来了,dom不知道该怎么用

支持(0) 反对(0) HelloWorld丶 | 园豆:3 (初学一级) | 2017-11-14 11:29

@HelloWorld丶: 有一种东西叫——搜索引擎:到处都是demo

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2017-11-14 11:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册