爬虫需要处理的一些问题:
----------------------------------------
简单的不能再简单的 粗略不严谨 地回顾一下:
发送HTTP请求:
Python里我最喜欢用requests发送请求,发送请求的代码是这样的:
到目前为止我还没有找到别的语言有比这个更加简单的发送HTTP请求的方式了(不排除我见识短的可能性)。
解析HTML源码:
Python默认可以使用HtmlParser来解析HTML,如果你觉得用着不爽(确实用着不爽),可以有很多第三方库来优雅的做这些事情(lxml / BeautifulSoup / ...),甚至可以通过一些库(selenium等)来直接使用浏览器。你可以直接使用类似 body.div.a['href'] 这样简单到爆的语法取自己需要的内容。
处理反爬虫机制:
还是Python的requests库,它可以很方便的套上一个代理IP:
效率:
爬虫的效率问题基本不在解析信息的速度上,网络IO的时间其实才是大头。比如你请求网页花了500ms,相应的你的解析速度是1ms还是10ms已经不重要了。
其他还有很多地方就不一一总结了,简而言之,写爬虫来讲,Python相对于其它语言的优势在于有足够简介的语法和足够多的库支持,开发效率很高,而且运行效率方面,网络IO的时间已经大大冲淡了Python的效率问题。
- 发送HTTP请求
- 解析HTML源码
- 处理反爬虫机制
- 效率
- ......
----------------------------------------
简单的不能再简单的 粗略不严谨 地回顾一下:
发送HTTP请求:
Python里我最喜欢用requests发送请求,发送请求的代码是这样的:
requests.get(URL) # GET
requests.post(URL, DATA) # POST
requests.put / delete / head / ... # 各种请求
# P.S.使用下面的代码处理Cookie更酸爽
requests.Session()
解析HTML源码:
Python默认可以使用HtmlParser来解析HTML,如果你觉得用着不爽(确实用着不爽),可以有很多第三方库来优雅的做这些事情(lxml / BeautifulSoup / ...),甚至可以通过一些库(selenium等)来直接使用浏览器。你可以直接使用类似 body.div.a['href'] 这样简单到爆的语法取自己需要的内容。
处理反爬虫机制:
还是Python的requests库,它可以很方便的套上一个代理IP:
request = requests.Session()
request.proxies = ....
爬虫的效率问题基本不在解析信息的速度上,网络IO的时间其实才是大头。比如你请求网页花了500ms,相应的你的解析速度是1ms还是10ms已经不重要了。
其他还有很多地方就不一一总结了,简而言之,写爬虫来讲,Python相对于其它语言的优势在于有足够简介的语法和足够多的库支持,开发效率很高,而且运行效率方面,网络IO的时间已经大大冲淡了Python的效率问题。
用Python可以1个人做5个人的事情,只是多用10倍的机器,多么划算。
摘自知乎