python爬取网页内容

765次阅读
没有评论
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”)时,就不要用非贪婪匹配了。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-27发表,共计1350字。
新手QQ群:570568346,欢迎进群讨论 Python51学习