首先要连接自己的数据库

import pymysql
import requests
#需要导入模块
db = pymysql.connect('localhost', 'root', '*********', 'mysql')#第三个是数据库密码,第四个是数据库名称
print("数据库连接成功!")
print("---------------------------------------------------")
r = requests.get("https://python123.io/ws/demo.html")#获取网页源代码
print(r.text)

几个基本操作

r = requests.get("https://python123.io/ws/demo.html")#获取网页源代码

print(r)#输出该网页请求是否成功,成功输出<Response []>

print(r.text)# 以文本形式输出网页源代码(格式和网页源代码一样)

print(r.content)#以二进制形式输出源代码(没有换行和空格)

print(r.encoding)# 输出网页编码方式

print(r.apparent_encoding)#和r.encoding功能相同,但更为精准

print(r.status_code)# 打印状态码, HTTP请求的返回状态,200表示连接成功,404表示失败

print(r.raise_for_status())# 若正常捕获网页内容,输出 None表示无异常

import re库

一、re.search(匹配规则,要匹配的字符串名称)

功能:扫描整个字符串返回第一个成功匹配的结果

result.group()获取匹配的结果
result.span()获去匹配字符串的长度范围

re.group(1)获取第一个括号中匹配的结果

import pymysql
import requests
#需要导入模块
db = pymysql.connect('localhost', 'root', '********', 'mysql')#第三个是数据库密码,第四个是数据库名称
print("数据库连接成功!")
print("---------------------------------------------------")
r = requests.get("https://python123.io/ws/demo.html")#获取网页源代码 import re
def get_text(url):#函数
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
print("-------------1-------------")
print(get_text('https://python123.io/ws/demo.html'))#输出网页源代码 demo = get_text('https://python123.io/ws/demo.html')#类似于数组赋值
#demo类似于一个数组名字
result = re.search('Th.*?ge', demo)#赋值
print("-------------2-------------")
print(result)#输出匹配字符串的长度范围和匹配的结果
print("-------------3-------------")
print(result.group())#只输出获取匹配的结果
print("-------------4-------------")
print(result.span())#输出获取匹配字符串的长度范围

输出

--------------------------
<html><head><title>This is a python demo page</title></head>
<body>
<p class="title"><b>The demo python introduces several python courses.</b></p>
<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
<a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a> and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python</a>.</p>
</body></html>
--------------------------
<re.Match object; span=(, ), match='This is a python demo page'>
--------------------------
This is a python demo page
--------------------------
(, )
--------------------------
['<p class="title"><b>The demo python introduces several python courses.</b></p>', '<p class="course">Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:\r\n<a href="http://www.icourse163.org/course/BIT-268001" class="py1" id="link1">Basic Python</a> and <a href="http://www.icourse163.org/course/BIT-1001870001" class="py2" id="link2">Advanced Python</a>.</p>'] Process finished with exit code

二、re.match(匹配规则,要匹配的字符串名称,匹配成功返回值)

功能:re.match()功能和re.search()一样,但是强调从字符串的起始位置匹配一个模式,如果不是起始位置匹配的话,match()就会返回None

一般使用re.search(),不用re.match()
语法格式:
re.match(pattern,string,flags=0)

三、re.findall(匹配规则,要匹配的字符串名称,re.s)---------re.s是输出回车换行,匹配到一个结果,输出一个换行

功能:搜索字符串,以列表(list)的形式返回全部能匹配的子串-------->print(result)

import re

html = '''<div id="songs-list">
<h2 class="title">经典老歌</h2>
<p class="introduction">
经典老歌列表
</p>
<ul id="list" class="list-group">
<li data-view="">一路上有你</li>
<li data-view="">
<a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
</li>
<li data-view="" class="active">
<a href="/3.mp3" singer="齐秦">往事随风</a>
</li>
<li data-view=""><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
<li data-view=""><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
<li data-view="">
<a href="/6.mp3" singer="邓丽君">但愿人长久</a>
</li>
</ul>
</div>''' results = re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>', html, re.S) print(results)#不换行输出所有匹配的内容 print(type(results))#type(results)返回results的数据类型(列表list)
for result in results:
print(result)#以列表形式输出所有匹配内容,包括括号
print(result[], result[], result[])#以列表形式依次返回 括号内 匹配的内容,不包括括号

输出结果

[('/2.mp3', '任贤齐', '沧海一声笑'), ('/3.mp3', '齐秦', '往事随风'), ('/4.mp3', 'beyond', '光辉岁月'), ('/5.mp3', '陈慧琳', '记事本'), ('/6.mp3', '邓丽君', '但愿人长久')]
<class 'list'>
('/2.mp3', '任贤齐', '沧海一声笑')
/.mp3 任贤齐 沧海一声笑
('/3.mp3', '齐秦', '往事随风')
/.mp3 齐秦 往事随风
('/4.mp3', 'beyond', '光辉岁月')
/.mp3 beyond 光辉岁月
('/5.mp3', '陈慧琳', '记事本')
/.mp3 陈慧琳 记事本
('/6.mp3', '邓丽君', '但愿人长久')
/.mp3 邓丽君 但愿人长久
[Finished in .1s]

几种匹配规则:

1、泛匹配

^:开始匹配标志

$:匹配结束标志

import re

content= "hello 123 4567 World_This is a regex Demo"
result = re.match("^hello.*Demo$",content)
print(result)
print(result.group())
print(result.span())

输出

<re.Match object; span=(, ), match='hello 123 4567 World_This is a regex Demo'>
hello World_This is a regex Demo
(, )
[Finished in .1s]

2、目标匹配

如果为了匹配字符串中具体的目标,则需要通过()括起来,()内就是要匹配输出的内容:

import re
content= "hello 1234567 World_This is a regex Demo"
result = re.match('^hello\s(\d+)\sWorld.*Demo$',content)
print(result)
print(result.group())
print(result.group())
print(result.span())

输出

<re.Match object; span=(, ), match='hello 1234567 World_This is a regex Demo'>
hello World_This is a regex Demo (, )
[Finished in .1s]

3、贪婪匹配

.* :尽可能多的匹配非目标字符,将输出目标字符长度匹配到最小

.*? :尽可能少的匹配非目标字符,将输出目标字符长度匹配到最大

注:按目标类型分界

.* :

import re

content= "hello 1234567 World_This is a regex Demo"
result= re.match('^hello.*(\d+).*Demo',content)
print(result)
print(result.group())

输出

<re.Match object; span=(, ), match='hello 1234567 World_This is a regex Demo'>

[Finished in .1s]

.*? :

import re

content= "hello 1234567 World_This is a regex Demo"
result= re.match('^hello.*?(\d+).*Demo',content)
print(result)
print(result.group())

输出

<re.Match object; span=(, ), match='hello 1234567 World_This is a regex Demo'>
]
[Finished in .1s

4、常规匹配(比较繁琐,不常用)

import re

content= "hello 123 4567 World_This is a regex Demo"
result = re.match('^hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
print(result)#输出源代码
print(result.group())#输出匹配内容
print(result.span())#输出匹配代码的长度

输出

<re.Match object; span=(, ), match='hello 123 4567 World_This is a regex Demo'>
hello World_This is a regex Demo
(, )
[Finished in .1s]

正则表达式

常用的匹配模式:
\w 匹配字母数字及下划线
\W 匹配f非字母数字下划线
\s 匹配任意空白字符,等价于[\t\n\r\f]
\S 匹配任意非空字符
\d 匹配任意数字
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
\z 匹配字符串结束
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
^ 匹配字符串的开头
$ 匹配字符串的末尾
. 匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[....] 用来表示一组字符,单独列出:[amk]匹配a,m或k
[^...] 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
* 匹配0个或多个的表达式
+ 匹配1个或者多个的表达式
? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n前面的表示
{m,m} 匹配n到m次由前面的正则表达式定义片段,贪婪模式
a|b 匹配a或者b
() 匹配括号内的表达式,也表示一个组
[\u4e00-\u9fa5] :匹配中文
(\d{}-\d{}-\d{}) : 匹配日期
.*? :匹配任意字符串
\[(\d{}-\d{}-\d{})\] 匹配时间 eg:[--] for content in contents:
try:
# 替换文本
s = str(content).replace('y,','')#.replace('<', '-5')
s = s.replace('年', '-').replace('月', '-').replace('日', '')
s = s.replace('(', '').replace(')', '').replace('\'', '')
content = s.split(',') # s = str(content).replace('/','-') #
# s = re.sub('(\d{4}-\d{2})',r'\1-',s)
# s = s.replace('(', '').replace(')', '').replace('\'', '')
# content = s.split(',') list.append(content) except EOFError as e:
print(e)
continue
return list

正则表达式匹配练习

1、匹配猫眼电影top100的电影名、主演、上映日期

对应正则表达式:'class="name".*?title="(.*?)".*?:(.*?)\s*?</p>.*?:(\d{4}-\d{2}-\d{2})'

2、匹配猫眼电影top100的海报图片

对应的正则表达式:'img\sdata-src="(.*?)"\salt'

3、匹配西南大学计算机学院讲座信息

 '<li><span\sclass="fr">\[(\d{4}-\d{2}-\d{2})\].*?&nbsp;&nbsp;(.*?)</a></li>',

python 网页爬虫 基础篇的更多相关文章

  1. Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)

    原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...

  2. 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

    本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...

  3. 深度学习入门者的Python快速教程 - 基础篇

      5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明 ...

  4. [资料分享]Python视频教程(基础篇、进阶篇、项目篇)

    Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...

  5. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  6. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

  7. Python扫描器-爬虫基础

    0x1.基础框架原理 1.1.爬虫基础 爬虫程序主要原理就是模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 1.1.基础原理 1.发起HTTP请求 2 ...

  8. Python BeautifulSoup4 爬虫基础、多线程学习

    针对 崔庆才老师 的 https://ssr1.scrape.center 的爬虫基础练习.Threading多线程库.Time库.json库.BeautifulSoup4 爬虫库.py基本语法

  9. Python网页爬虫(一)

    很多时候我们想要获得网站的数据,但是网站并没有提供相应的API调用,这时候应该怎么办呢?还有的时候我们需要模拟人的一些行为,例如点击网页上的按钮等,又有什么好的解决方法吗?这些正是python和网页爬 ...

随机推荐

  1. 简述javascript的解析与执行

    我们知道浏览器中javascript程序的执行是基于变量与函数的.那么浏览器是如何保存数据,又是如何执行的呢?今天我们一起来探究一下! 0.写在前 最新的 ECMAScript 标准定义了 8 种数据 ...

  2. Java对比两个数据库中的表和字段,写个冷门的东西

    Java对比两个数据库中的表和字段,写个冷门的东西 转载的 来源网络 目前所在的项目组距离下个版本上线已经很近了,就面临了一个问题:开发人员在开发库上根据需要增加数据表.数据字段.或者变更了字段类型或 ...

  3. Java设计模式之Iterator模式

    分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...

  4. Python字符串魔法方法

    isalpha()判断是否权威字母或者汉字 isdecimal()(十进制小数)    isdigit()  判断是否为数字 特殊数字 isdigit()判断更为厉害   也是判断数字  都返回Tru ...

  5. JAVA虚拟机:对象的创建

    在虚拟机中,当遇到需要new一个对象时,虚拟机首先会去处于方法区的常量池中查找new指令的参数,即查找此类的符号引用是否已存在,并且检查此符号引用的代表类是否已经做过加载.解析和初始化,如果做过则不会 ...

  6. SciPy 基础功能

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  7. HDU - 1754 I Hate It (线段树点修改求最大值)

    题意:有N个学生M条操作,0<N<=200000,0<M<5000,要么查询某区间内学生的最高分,要么更改某学生的成绩. 分析:原理和线段树点修改求和类似. #include& ...

  8. 小程序通过web-view实现与h5页面之间的交互

    在小程序端使用web-view内嵌网页,通过 src 携带参数,通过 @message 接收h5传回的数据 <template> <view> <web-view :sr ...

  9. LCA之tarjan离线

    显然81篇题解是有点多了,不让我提交. 更为不好的是没有一篇详细的\(tarjan\)(不过我也不会写详细的). 不过\(tarjan\)并没有我们想象的那样难理解,时间也并不爆炸(巧妙的跳过难写二字 ...

  10. HTML速写

    1. E 代表HTML标签. 2. E#id 代表id属性. 3. E.class 代表class属性. 4. E[attr=foo] 代表某一个特定属性. 5. E{foo} 代表标签包含的内容是f ...