Python爬虫学习稿(四)

来源:互联网 发布:java aes对称加密算法 编辑:程序博客网 时间:2024/05/23 21:17

Python爬虫学习稿(四)

一、一个小Demo

# encoding: utf-8from collections import dequeimport reimport urllib.requestimport urllibheaders={        '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 = 0while 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-8STYLE = \{        '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官方文档

0 0
原创粉丝点击