关于爬虫的一些问题

2014-12-30 10:55:05 +08:00
 LINAICAI

最近在学习Python,尝试爬一些站,发现有些站并不好爬,不是因为分页问题,这个还算好迭代。下面列举一下:
1、某些站正文内容是用<p></p>这种方法把一段文字分成几行,另外图片和时间的字段也是用<p></p>装饰,正则不会写。
2、爬站的时候虽然用单线程,但明显感觉到网站对于爬虫有一个访问限制,爬一页需要的时间居然很固定在10秒左右。
3、单线程下爬完一页应该上传到我的远程数据库,但如果遇到上传过程中产生错误或者异常,那么一页爬的数据并没有全部上传完毕,这时候用多线程就麻烦了,很可能不清楚上传进度,单线程下因为异常退出没有办法做到全自动。

想请教一下高手怎么破啊,这些问题。

4361 次点击
所在节点    Python
35 条回复
herozzm
2014-12-30 21:34:18 +08:00
@pandada8
@binux
正则应该是比较通用的选择吧,不管你用的是python还是golang,只是性能消耗较大
herozzm
2014-12-30 21:41:09 +08:00
也可以用xpath和css selector
pandada8
2014-12-30 22:12:33 +08:00
@herozzm 您老先去看了那篇stackoverflow的文章呗
我还真是第一次看到这样的说法……
一般来说正则性能比xpath之流要好,性能消耗也少,但是对于复杂页面结构和复杂页面内容比较无力,同时并不通用,你可能需要随时修改正则
xpath 与 css selector 倒是显得比较通用,再加上beautifulsoup这种库的傻瓜化封装使用较为方便,但是由于要解析html,开销反而倒是比较大
mengskysama
2014-12-30 22:25:41 +08:00
BS4确实是好东西,开销大不是开玩笑,而且有些不标准的html页面比如遇到没有进行正确转义bs4会解析出错,如果工作量很大可以考虑lxml要快要快一些。

前端限制频率的话在前面加个GAE就行了,遇到错误重试,GAE出口是'随机'好几十个。

第三个问题明显是设计缺陷。
herozzm
2014-12-30 22:25:43 +08:00
@pandada8 我说正则比较通用是指的这种方式,并不是说具体匹配的写法通用,用了正则,肯定是每个页面得单独写正则
pandada8
2014-12-30 22:30:27 +08:00
@herozzm 常见的语言应该也都不缺HTML解析的库
herozzm
2014-12-30 22:34:13 +08:00
@pandada8 php似乎就没有,得上正则吧?
pandada8
2014-12-30 22:38:59 +08:00
herozzm
2014-12-30 22:46:17 +08:00
@pandada8 孤陋寡闻了
fewspider
2014-12-31 00:31:53 +08:00
1、beautifulsoup可以搞定,找到那个节点后,text就是内容了
2、10秒左右,这明显是网速,打开一个页面,加载那些数据,这些都需要时间,不是站点限制你访问
3、可以try exception一下,把需要的数据整理一下,判断是否为空,不为空再去调数据库插入
beverse
2014-12-31 00:43:49 +08:00
我也刚学,完全用正则,你可以看看:codejob.me

解析很容易的,关键在于稳定把网页下载下来。
LINAICAI
2014-12-31 00:44:30 +08:00
@fewspider
1、新人一个确实不知道这个利器
2、但我访问其他站甚至爬另外一个站确实比这个快的多
fewspider
2014-12-31 00:46:26 +08:00
@LINAICAI 你可以ping一下这个站跟其他站的速度
doumeki
2014-12-31 16:19:05 +08:00
BS4注意,之前用过,发现不能很好处理如<br>这样的自闭代码。当然如果Hack也简单,也就一句话的事。lxml也试过,不明原因的运行中每次输出的结果都不一至,估计也是<br><br>这类导致的
LINAICAI
2015-01-02 15:57:45 +08:00
@wuhang89
<p><img src="images/n_shiye.gif" width="151" height="268" align="left" />XXX</p>

这个怎么获取XXX的内容,用beautifulsoup。
soup.find('omg', {'align' : 'left'})貌似获取的只有XXX前面的标签啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/157828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX