爬虫的四个主要步骤

  1. 明确目标 (要知道你准备在哪个范围或者网站去搜索)
  2. 爬 (将所有的网站的内容全部爬下来)
  3. 取 (去掉对我们没用处的数据)
  4. 处理数据(按照我们想要的方式存储和使用)

什么是正则表达式

正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  • 给定的字符串是否符合正则表达式的过滤逻辑(“匹配”);
  • 通过正则表达式,从文本字符串中获取我们想要的特定部分(“过滤”)。

正则表达式匹配规则

Python 的 re 模块

在 Python 中,我们可以使用内置的 re 模块来使用正则表达式。

有一点需要特别注意的是,正则表达式使用 对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个 r 前缀,示例:

r'chuanzhiboke\t\.\tpython'

使用正则爬去名言网的名言,只获取首页的10条数据

from urllib.request import urlopen
import re def spider_quotes(): url = "http://quotes.toscrape.com"
response = urlopen(url)
html = response.read().decode("utf-8") # 获取 10 个 名言
quotes = re.findall('<span class="text" itemprop="text">(.*)</span>',html)
list_quotes = []
for quote in quotes:
# strip 从两边开始搜寻,只要发现某个字符在当前这个方法的范围内,统统去掉
list_quotes.append(quote.strip("“”")) # 获取 10 个名言的作者
list_authors = []
authors = re.findall('<small class="author" itemprop="author">(.*)</small>',html)
for author in authors:
list_authors.append(author) # 获取这10个名言的 标签
tags = re.findall('<div class="tags">(.*?)</div>',html,re.RegexFlag.DOTALL)
list_tags = []
for tag in tags:
temp_tags = re.findall('<a class="tag" href=".*">(.*)</a>',tag)
tags_t1 = []
for tag in temp_tags:
tags_t1.append(tag)
list_tags.append(",".join(tags_t1)) # 结果汇总
results = []
for i in range(len(list_quotes)):
results.append("\t".join([list_quotes[i],list_authors[i],list_tags[i]])) for result in results:
print(result) #调取方法
spider_quotes()

BeautifulSoup4解析器

BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的 XML解析器。

官方文档:http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0

使用BeautifulSoup4获取名言网首页数据

from urllib.request import urlopen
from bs4 import BeautifulSoup url = "http://quotes.toscrape.com"
response = urlopen(url) # 初始化一个 bs 实例
# 对应的response对象的解析器, 最常用的解析方式,就是默认的 html.parser
bs = BeautifulSoup(response, "html.parser") # 获取 10 个 名言
spans = bs.select("span.text")
list_quotes = []
for span in spans:
span_text = span.text
list_quotes.append(span_text.strip("“”")) # 获取 10 个名言的作者
authors = bs.select("small")
list_authors = []
for author in authors:
author_text = author.text
list_authors.append(author_text) # 获取这10个名言的 标签
divs = bs.select("div.tags")
list_tags = []
for div in divs:
tag_text = div.select("a.tag")
tag_list = [ tag_a.text for tag_a in tag_text]
list_tags.append(",".join(tag_list)) #结果汇总
results = []
for i in range(len(list_quotes)):
results.append("\t".join([list_quotes[i],list_authors[i],list_tags[i]])) for result in results:
print(result)

Python学习之路 (五)爬虫(四)正则表示式爬去名言网的更多相关文章

  1. python学习之路 五:函数式编程

    本节重点 掌握函数的作用.语法 掌握作用域.全局变量与局部变量知识 掌握函数名称空间.闭包 一.函数编程基础知识 1.基本定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数 ...

  2. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  3. python学习之路------你想要的都在这里了

    python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...

  4. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  5. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  6. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  7. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...

  8. python学习心得第五章

    python学习心得第五章 1.冒泡排序: 冒泡是一种基础的算法,通过这算法可以将一堆值进行有效的排列,可以是从大到小,可以从小到大,条件是任意给出的. 冒泡的原理: 将需要比较的数(n个)有序的两个 ...

  9. Python学习笔记(五)

    Python学习笔记(五): 文件操作 另一种文件打开方式-with 作业-三级菜单高大上版 1. 知识点 能调用方法的一定是对象 涉及文件的三个过程:打开-操作-关闭 python3中一个汉字就是一 ...

随机推荐

  1. Q:链表的倒数第K个元素

    问题:如何得到链表中的倒数第k个元素?   一种简单的思路是遍历链表一遍,并统计出链表中节点的数目,然后计算出倒数第k个元素到链表头节点的元素的距离,然后得到对应的结果.但是,我们能否有一种更加简便的 ...

  2. 总结oninput、onchange与onpropertychange事件的使用方法和差别

    onchange事件仅仅在键盘或者鼠标操作改变对象属性,且失去焦点时触发,脚本触发无效:而onkeydown/onkeypress/onkeyup在处理复制.粘贴.拖拽.长按键(按住键盘不放)等细节上 ...

  3. Yii 之components

    当我们创建一个module的时候,对应的path alias就已经创建.比如我们定义了一个module: www 1 2 3 4 5 'modules'=>array(     'www'=&g ...

  4. 在element-ui的el-tree组件中用render函数生成el-button

    本文主要介绍怎么在el-tree组件中通过render函数来el-button. 这是element-ui中el-tree树: 这是需要实现的效果: tree.vue文件中,具体实现的代码如下: &l ...

  5. mac os idea的快捷键

    全局搜索:shift+command+f 搜索类:command+o 光标向前向后移动:command+option+(左/右) 删除一行: command+delete

  6. 1000! mod 10^250

    1000! mod 10^250  =============== the answer is 2 ================ Hi I'm trying to solve the above ...

  7. android控件TextView之 分段显示不同颜色

    代码如下: attrs.xml文件: 第二种方式: String newMessageInfo = "<font color='red'><b>" + 红色 ...

  8. 612.1.003 ALGS4 | Stacks and Queues

    Algorithm | Coursera - by Robert Sedgewick Type the code one by one! 不要拜读--只写最有感触的!而不是仅仅做一个笔记摘录员,那样毫 ...

  9. Android ListView无数据项时提示

    只需要调用在代码中调用setEmptyView(View emptyView)设置ListView为空时显示这个TextView即可. 布局文件 <?xml version="1.0& ...

  10. ahjesus wp-autopost破解版,亲测可用

    在funtion.php里 把fetchUrl 这个函数的判断去掉 直接执行判断为真的结果下面是修改后的函数 function fetchUrl($_var_22){        global $w ...