1.正则表达式简介:
a.元字符:
- . 匹配任意字符(不包括换行符)
- ^ 匹配开始位置,多行模式下匹配每一行的开始
- $ 匹配结束位置,多行模式下匹配每一行的结束
- * 匹配前一个元字符0到多次
- + 匹配前一个元字符1到多次
- ? 匹配前一个元字符0到1次
- {m,n} 匹配前一个元字符m到n次
- \d 匹配一个数字,相当与[0-9]
- \D 匹配一个非数字
- \s 匹配任意空白字符
- \S 匹配任意非空白字符
- \w 匹配数字、字母、下划线中任意一个字符
- \W 匹配非数字、字母、下划线
b.模式:
- I 忽略大小写的匹配模式
s = 'hello World!' regex = re.compile("hello world!", re.I)
- S '.'可以匹配任何字符,包括换行符
- X 冗余模式,忽略正则表达式中的空白和#号的注释
c.函数:
- re.compile【全局匹配】
s = '''first line second line third line''' regex = re.compile(".+") print(regex.findall(s)) # output> ['first line', 'second line', 'third line']
- re.search【扫描整个字符串并返回第一个成功的匹配】
- re.match 【从第一个字符开始匹配】
2.爬取csdn图文课程标题和作者
打开csdn图文课程网址:https://gitchat.youkuaiyun.com/?utm_source=csdn_toolbar
鼠标右键查看网页源代码:
看到我们需要的信息:标题和作者,如图中的红色框,根据这些源代码可以写正则表达式,提取我们需要的信息
正则表达式:
<h3 class="item_title">(.*?)</h3>.*?<p class="item_name">(.*?)</p>
(.*?)是我们需要的内容
下面是爬虫的代码:
import re
import urllib.request
import mysql.connector
#打开网页并解码
data = urllib.request.urlopen("https://gitchat.youkuaiyun.com/?utm_source=csdn_toolbar").read().decode("utf-8")
#通过python中的re模块和写的正则表达式提取信息,re.S让 . 可以匹配换行符;re.M多行匹配
result = re.findall(r'<h3 class="item_title">(.*?)</h3>.*?<p class="item_name">(.*?)</p>',data,re.S|re.M)
#插入数据库
books = []
db = mysql.connector.connect(
host="localhost",
user="root",
passwd="root",
database="cy"
)
cursor = db.cursor()
sql = "insert into book (title,author) values (%s,%s)"
for title,name in result:
val = (title,name)
books.append(val)
cursor.executemany(sql,books)
db.commit()
#从数据库读取信息
sql = "select * from book"
cursor.execute(sql)
rst = cursor.fetchall()
for x in rst:
print(x)
运行后查看数据库:
控制台输出信息:
一个简单的爬虫就完成了,本人工作主要用java,刚学python,如有不足,多多指教!