同学们,有人用Python写过京东的爬虫吗??问题多多

2013-02-23 17:05:38 +08:00
 vcamx
python自带的urllib2库写的

opener = urllib2.build_opener(urllib2.HTTPRedirectHandler(), urllib2.HTTPCookieProcessor())
webpage = opener.open(url)
html = webpage.read()
webpage.close()
print html

1. 有的时候可以抓到html代码,但是显示乱码,gbk,gb2312,utf-8都试过了。chardet 也用过,检测出来居然是windows-XXXX。这是什么问题??
用selenium抓每次都可以正常显示,不存在乱码和抓不到的情况

2. 有的时候代码抓不到,返回 Errno 10054
user-agent也修改过,换了各种浏览器的,不行的时候还是不行
增加其他字段也是一样

3. 用httplib,代码如下

c = httplib.HTTPConnection('www.360buy.com')
html = c.getresponse().read()
print html
print len(html)

显示 一个字符的乱码,但是长度居然有16201!?

有的时候返回502 bad gateway 的html代码!?

求大神搭救!!!!!
7901 次点击
所在节点    程序员
13 条回复
Asimov
2013-02-23 17:06:19 +08:00
1。用 Requests
2。爬慢点,鸡东有防爬
vcamx
2013-02-23 17:10:19 +08:00
@Asimov 修改user-agent?试过了,还是一样……我单线程抓的,而且还是在人工测试的情况下……
hfeeki
2013-02-23 19:00:23 +08:00
有几个错误算啥?像爬虫这样的应用应该要写很多的预防代码,就是处理各种异常、出错的情况,可能会达到65%甚至更多(80-90),要有心理准备。
具体复杂性还要看看京东自己的代码质量,是否有进行自动化测试,京东代码质量高(机器可读性好,比较少的特殊处理代码),你的代码就会简单,反之,如果京东的代码质量差(主要是各种各样进行特殊处理的代码),会导致你根本没法使用很简单的代码去爬他们的网页。
muzuiget
2013-02-23 19:24:53 +08:00
我写过,不过属于玩票性质,现在代码已经失效了。京东是开启 gzip 压缩的,也就是你用 urllib2.open(url).read() 读取出来数据其实是 gzip 的压缩数据,所以你怎么检测编码也是失败,你要自己解压,嫌麻烦就直接用 requests 好了,这个库会自动判断是否开启了 gzip 压缩并替你解压,你读取的就是 html 了。京东的 html 用的是 GBK 编码。
vcamx
2013-02-23 20:00:56 +08:00
@muzuiget 原来是gzip,感谢了!
vcamx
2013-02-23 20:01:52 +08:00
@hfeeki What are u talking about? = =
hfeeki
2013-02-23 20:52:42 +08:00
I just talking about my experiences on write a good web crawler. You need to hanle any excepiton or errors, note: it is ANY. Because when writing a web crawler, you must handle all of unexpected problems.
qiao
2013-02-23 21:13:37 +08:00
呃,我连 requests 都嫌麻烦,直接上 scrapy 吧。
vcamx
2013-02-24 00:26:34 +08:00
@hfeeki 额,你说的我当然知道。我提问只是想知道有没有更好的解决方法而已。anyway,还是谢谢你
vcamx
2013-02-24 00:28:52 +08:00
@qiao 好吧……
@Asimov @muzuiget
发现用代理可以抓,本机还是有时不行……
leebo
2013-02-25 21:36:17 +08:00
ruby 写采集感觉比较简单 open-uri + nokogiri 感觉很爽
wenbinwu
2013-02-25 21:54:40 +08:00
@vcamx 帮你总结下,@hfeeki 想说的就是要“要有心理准备”,爬虫的纠错代码可能会占总代码量的很大比例
vigoss
2013-02-25 23:02:02 +08:00
我一看就知道多半是gzip..

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

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

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

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

© 2021 V2EX