Python学习之路 (五)爬虫(四)正则表示式爬去名言网
爬虫的四个主要步骤
- 明确目标 (要知道你准备在哪个范围或者网站去搜索)
- 爬 (将所有的网站的内容全部爬下来)
- 取 (去掉对我们没用处的数据)
- 处理数据(按照我们想要的方式存储和使用)
什么是正则表达式
正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
- 给定的字符串是否符合正则表达式的过滤逻辑(“匹配”);
- 通过正则表达式,从文本字符串中获取我们想要的特定部分(“过滤”)。
正则表达式匹配规则
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学习之路 (五)爬虫(四)正则表示式爬去名言网的更多相关文章
- python学习之路 五:函数式编程
本节重点 掌握函数的作用.语法 掌握作用域.全局变量与局部变量知识 掌握函数名称空间.闭包 一.函数编程基础知识 1.基本定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- Python学习之路【目录】
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...
- python学习心得第五章
python学习心得第五章 1.冒泡排序: 冒泡是一种基础的算法,通过这算法可以将一堆值进行有效的排列,可以是从大到小,可以从小到大,条件是任意给出的. 冒泡的原理: 将需要比较的数(n个)有序的两个 ...
- Python学习笔记(五)
Python学习笔记(五): 文件操作 另一种文件打开方式-with 作业-三级菜单高大上版 1. 知识点 能调用方法的一定是对象 涉及文件的三个过程:打开-操作-关闭 python3中一个汉字就是一 ...
随机推荐
- MySQL6:视图
什么是视图 数据库中的视图是一个虚拟表.视图是从一个或者多个表中导出的表,视图的行为与表非常相似,在视图中用户可以使用SELECT语句查询数据,以及使用INSERT.UPDATE和DELETE修改记录 ...
- SpringBoot(六) Web Applications: Embedded Containers(嵌入式容器)
参考 文档: 28.4 Embedded Servlet Container Support
- win32FTP程序设计
掌握socket基于事件机制的网络程序设计,掌握多线程技术的FTP Server端设计方法,掌握FTP标准基本协议及其程序的实现,掌握文件内容的网络传输设计方法. 利用CFtpServer类接收和解析 ...
- Go 中包导入声明
Go中的程序由软件包组成.通常,软件包依赖于其他软件包,或者内置于标准库或第三方的软件包.包需要先导入才能使用其导出的标识符.本文将翻译一篇国外的文章,用于介绍包导入的原理以及几种常用的导入方式. & ...
- js小练习
1.题目:某班的成绩出来了,现在老师要把班级的成绩打印出来. 效果如下:xxx年xx月x日 星期x--班级总分为:81 格式要求:1.显示打印的日期.格式为类似“xxxx年xx月xx日 星期x”的当 ...
- 谷歌浏览器network请求时间(stalled,DNS Lookup,Waiting)分析以及解决方案
network工具功能强大,能够让我看到网页加载的信息,比如加载时间,和先后顺序,是否是并行加载,还是堵塞加载. 默认情况下有八列: (1).Name:表示加载的文件名. (2).Method:表示请 ...
- 慕课网 jQuery 笔记
$("div").html()是使用标签选择器获取div标签,对应于javascript中的各类选择器 $("*") ——所有元素 $("#lastn ...
- 线上Bug修复流程
- java 标准输出流、标准错误输出流、标准输入流及扫描仪
初步认识标准输出流.错误输出流.输入流.扫描仪 package com.mydemo.controller; import java.util.Scanner; public class HelloW ...
- 通过html导出PDF如何分页
每页一个DIV,加上样式page-break-inside:avoid; 即可分页了 .pdfpage{page-break-inside:avoid;} <div class="pd ...