上次学习了用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 class="title" target="_blank" href="(.*?)">(.*?)</a>[n][s]*'
reg += '<p class="abstract">[n](.*)[n][s]*'
reg += '</p>[n][s]*<div class="meta">[n][s]*'
reg += '<a class="collection-tag" 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免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试