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 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”)时,就不要用非贪婪匹配了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值