您的位置:首页 >文章内容

Python爬取网页内容

来源:互联网 作者:admin 时间:2021-03-24 10:55:21

    现在Python无疑是最受欢迎的计算机语言,它被形容为“优雅”、“明确”、“简单”。那么,我们是不是可以用Python来爬取网络数据呢?当然是可以的,下面我们就以简书为例来演示一下Python爬取网络数据的代码。


微信截图_20210319165845.png

    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代理服务一直广受好评,是值得一试的。


因为专业! 所以简单! 产品至上,价格实惠 是我们服务追求的宗旨

免费试用