Python爬取网页内容
现在Python无疑是最受欢迎的计算机语言,它被形容为“优雅”、“明确”、“简单”。那么,我们是不是可以用Python来爬取网络数据呢?当然是可以的,下面我们就以简书为例来演示一下Python爬取网络数据的代码。
import re
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
html = getHtml("http://www.jianshu.com/")
reg = '<a target="_blank" href="(.*?)">(.*?)</a>[\n][\s]*'
reg += '<p>[\n](.*)[\n][\s]*'
reg += '</p>[\n][\s]*<div>[\n][\s]*'
reg += '<a target="_blank" href="/c/.*?">(.*?)</a>[\n][\s]*'
reg += '<a target="_blank" href="/p/.*?">[\n][\s]*'
reg += '<i class="iconfont ic-list-read"></i> (.*)[\n]'
reg += '</a>[\s]*<a target="_blank" href="/p/.*?">[\n][\s]*'
reg += '<i class="iconfont ic-list-comments"></i> (.*)[\n]'
reg += '</a>[\s]*<span><i class="iconfont ic-list-like"></i> (.*)</span>[\n][\s]*'
reg += '<span><i class="iconfont ic-list-money"></i> (.*)</span>'
#当正则表达式过长时,我们选取这种方式将其分割
page = re.compile(reg)
artlist = re.findall(page,html)
for arts in artlist: #arts中包含了文件名,链接部分,阅读量等等
for art in arts:
if art.startswith("/p/"): #获取链接
print "http://www.jianshu.com" + art
else:
print art
这次正则表达式的内容有:
1) \s(小写s)匹配任意的空白符,当有多个空白时,用[\s]*
2) ? 涉及到贪婪模式,我们把.*称为贪婪匹配,把.*?称为非贪婪匹配(懒惰匹配)
贪婪匹配是匹配尽可能多的字符,比如正则表达式为a.*b,用它来匹配字符串abbab,结果就是字符串abbab。
非贪婪匹配是匹配尽可能少的字符,比如表达式为a.*?b,用它匹配字符串abbab,结果是“abb”和“ab”。
所以在上面例子中,当有数字字符串(如“1111”)时,就不要用非贪婪匹配了。
注意,以上代码虽然能顺利地爬取网络数据,但是由于需要大量登录,所以对于账号的的需求是很大的。而且,在自动登陆的同时,我们的IP也会变得很容易被封。
所以,在准备用Python爬取网络数据之前,还应该准备好大量的登录账户和IP。
账户可以在某宝上很容易买到,IP地址我更推荐使用IP代理,现在的HTTP代理价格已经远低于web服务器费用,完全是可以接受的。
万变软件的IP代理服务一直广受好评,是值得一试的。
推荐阅读
热门文章
因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨
免费试用