Python爬虫学习稿(四)

Python爬虫学习稿(四)

一、一个小Demo

# encoding: utf-8

from collections import deque
import re
import urllib.request
import urllib

headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'
        }

queue = deque()
visited = set()

#url = 'http://news.dbanotes.net'  # 入口页面
url = 'http://www.v2ex.com'

queue.append(url)
cnt = 0

while queue:
    url = queue.popleft()  # 队首元素出队
    visited |= {url}  # 标记为已访问
    print('已经抓取: ' + str(cnt) + '   正在抓取 <---  ' + url)
    cnt += 1
    urlop = urllib.request.urlopen(url)
    if 'html' not in urlop.getheader('Content-Type'):
        continue

# 避免程序异常中止, 用try..catch处理异常
    try:
        data = urlop.read().decode('utf-8')
    except:
        continue

# 正则表达式提取页面中所有队列, 并判断是否已经访问过, 然后加入待爬队列

    linkre = re.compile('href="/t/[0-9].+#reply[0-9]+"')

    for x in linkre.findall(data):
        if 'http' in x and x not in visited:
            queue.append(x)
            print('加入队列 --->  ' + x)

这个程序是没法运行的,并不是因为错误,而是href中不是完整的URL地址,需要在所有匹配的结果前加上www.v2ex.com,而我不知道怎么添加这个地址,只能以后再改进了,但是从调试的结果来看,匹配时完全正确的了,抓取也都正常,以后没准会BeautifulSoup来抓取,可能对URL的抓取会更加智能

二、Python 3 输出显示颜色
彩色是不是更加醒目呢?代码高亮已经告诉了你答案,那么在运行程序的时候怎么才能带有颜色呢?
在Linux终端中,使用转义序列来进行显示,转义序列以ESC开头,即ASCII码下的\033,其格式为:\033[显示方式;前景色;背景色m
显示方式、前景色、背景色至少一个存在即可

前景色       背景色            颜色
-----------------------------------
30            40              黑色
31            41              红色
32            42              绿色
33            43              黃色
34            44              蓝色
35            45              紫红色
36            46              青蓝色
37            47              白色

显示方式           意义
-------------------------
0                终端默认设置
1                高亮显示
4                使用下划线
5                闪烁
7                反白显示
8                不可见

让我们来看一个例子

# encoding: utf-8

STYLE = \
{
        'fore':
        {
                'black': 30, 'red': 31, 'green': 32, 'yellow': 33,
                'blue': 34, 'purple': 35, 'cyan': 36, 'white': 37,
        },
        'back':
        {
                'black': 40, 'red': 41, 'green': 42, 'yellow': 43,
                'blue': 44, 'purple': 45, 'cyan': 46, 'white': 47,
        },
        'mode':
        {
                'bold': 1, 'underline': 4, 'blink': 5, 'invert': 7,
        },
        'default':
        {
                'end': 0,
        }
}


def use_style(string, mode='', fore='', back=''):
    mode = '%s' % STYLE['mode'][mode] \
        if mode in STYLE['mode'] else ''
    fore = '%s' % STYLE['fore'][fore] \
        if fore in STYLE['fore'] else ''
    back = '%s' % STYLE['back'][back] \
        if back in STYLE['back'] else ''

    style = ';'.join([s for s in [mode, fore, back] if s])
    style = '\033[%sm' % style if style else ''
    end = '\033[%sm' % STYLE['default']['end'] if style else ''

    return '%s%s%s' % (style, string, end)


def test():
    print(use_style('Normal'))
    print(use_style('Bold', mode='bold'))
    print(use_style('Underline & red text', mode='underline', fore='red'))
    print(use_style('Invert & green back', mode='reverse', back='green'))
    print(use_style('Black text & White back', fore='black', back='white'))

if __name__ == '__main__':
    test()

这是在Linux下的写法,此程序在Pycharm中可以执行得到预期结果,但是cmd/Powershell下调用执行没有尝试,只贴一个地址Python实现Windows CMD命令行彩色输出,有需要的同学可以去上面这个地址学习怎样在cmd中实现
三、安装BeautifulSoup 4
官方网站上找到自己需要的版本,我下载的是4.4.0,虽然有4.4.1但是我并没有选择
解压,放在Python 3.3.5目录下,然后在Pycharm 的Terminal里cd进入这个目录下,然后执行"python.exe的路径" setup.py build"python.exe的路径" setup.py install两条命令就安装完成了
然后在你的.py文件中,import bs4如果出现高亮就说明安装成功了
更简单的方法就是在Pycharm的插件里找到pip,然后用pip搜索安装非常方便,如果是Linux就直接用命令更好。
Beautiful Soup 4.2.0官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值