Python爬虫简单案例(Excel/Mysql两种存储方式)

Python爬虫的经典入门案例当属爬豆瓣的电影Top250了(哈哈哈被薅秃的豆瓣)

本例用到的库有BeautifulSoupreurllib.request,urllib.error以及将数据保存到excel的xlwt和将数据保存到Mysql的sqlite3,全部操作在一个.py文件里完成

1.导入库

1
2
3
4
5
import re     #正则表达式,进行文字匹配
from bs4 import BeautifulSoup #网页解析,获取数据
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt #进行excel操作
import sqlite3 #进行SQLLite操作

2.mian方法

1
2
3
4
5
6
7
8
def main():
baseurl="https://movie.douban.com/top250?start="
#1.爬取网页
datalist=getData(baseurl)
print(datalist)
# 3.保存数据
savepath = "豆瓣电影Top250.xls"
saveData(datalist,savepath)

3.正则匹配

1
2
3
4
5
6
7
#模
findname=re.compile(r'<span class="title">(.*?)</span>')
findintroduce=re.compile(r'<p class="">(.*?)</p>',re.S)
findscore=re.compile(r'<span>(.*?)人评价</span>')
findword=re.compile(r'<span class="inq">(.*)</span>')
findimg=re.compile(r'class="" src="(.*?)" width="100"/')
findmore=re.compile(r'<a class="" href="(.*?)">')

4.爬取网页

豆瓣Top250的网页是每一页25个电影,共10页
所以mian()baseurl="https://movie.douban.com/top250?start=",在爬取时用for i in range(0,10)url=baseurl+str(i*25)翻页

注:range(0,10)左闭右开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#1.爬取网页
def getData(baseurl):
datalist=[]
for i in range(0,10):
url=baseurl+str(i*25)
# 1.1爬取
html=askUrl(url)
bs=BeautifulSoup(html,"html.parser")
bss=bs.find_all("div",class_="item")
# print(bss)
# 1.2逐一解析数据
for item in bss:
data=[]
item=str(item)

name=re.findall(findname,item)
if (len(name)==2):
cname=name[0]
oname=name[1]
name=cname+oname
data.append(name)
else:
data.append(name)

introduce = re.findall(findintroduce, item)[0]
introduce=re.sub(" ", "",introduce)
introduce=re.sub("<br/>", "",introduce)
data.append(introduce.strip())

score=re.findall(findscore,item)[0]
data.append(score)

word=re.findall(findword,item)
if len(word)!=0:
data.append(word)
else:
data.append("无")

img = re.findall(findimg, item)[0]
data.append(img)

more=re.findall(findmore,item)[0]
data.append(more)

datalist.append(data)

return datalist

#2爬取
def askUrl(url):

head={
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0"

}
req=urllib.request.Request(url,headers=head)
html=urllib.request.urlopen(req)
return html

5.保存数据(以下方法二选一)

5.1.保存到excel
1
2
3
4
5
6
7
8
9
10
11
12
13
#3.保存数据到excel
def saveData(datalist,savepath):
addxls=xlwt.Workbook(encoding="utf-8")
addsheet=addxls.add_sheet('sheet1')
col=('电影名字','介绍','评价人数','一句话','图片链接','影片详情')
for i in range(0,6):
addsheet.write(0,i,col[i])
for i in range(0,250):
data=datalist[i]
print("第%d条"%i)
for j in range(0,6):
addsheet.write(i+1,j,data[j])
addxls.save(savepath)
5.2.保存到mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 3.保存数据到mysql
def saveData(datalist):
# 打开数据库连接
db = pymysql.connect(host='127.0.0.1',
user='root',
password='#密码',
database='#数据库名')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
for i in range(0,250):
data=datalist[i]
k=tuple(data)
print(k)
# SQL 插入语句
sql = "INSERT INTO `表名`(name,introduce,score,word,img,more)VALUES (%s,%s,%s,%s,%s,%s)"
try:
# 执行sql语句
# 提交到数据库执行
cursor.execute(sql, k)
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# 关闭数据库连接
db.close()

6.执行当前文件

1
2
3
4
5
#执行当前文件
if __name__ =="__main__":
print("开始爬取")
main()
print("爬取完成")

执行文件成功后,控制台会打印如下结果:
控制台结果

同级目录下找到excel文件:
豆瓣电影Top250.xls

mysql进入相应database,select * from 表名
mysql内的存储结果

The End


Python爬虫简单案例(Excel/Mysql两种存储方式)
https://wwwhisperr.github.io/2022/07/27/demo10/
作者
Whisper
发布于
2022年7月27日
许可协议