python爬虫使用正则爬取网站

本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。
本文章是自己学习的一些记录。欢迎各位大佬点评!

首先
今天是第一天写博客,感受到了博客的魅力,博客不仅能够记录每天的代码学习情况,并且可以当作是自己的学习笔记,以便在后面知识点不清楚的时候前来复习。这是第一次使用爬虫爬取网页,这里展示的是爬取豆瓣电影top250的整个过程,欢迎大家指点。

这里我只爬取了电影链接和电影名称,如果想要更加完整的爬取代码,请联系我。qq 1540741344 欢迎交流

开发工具: pycharm、chrome
分析网页
在开发之前你首先要去你所要爬取的网页提取出你要爬取的网页链接,并且将网页分析出你想要的内容。

在开发之前首先要导入几个模块,模块描述如下,具体不知道怎么导入包的可以看我下一篇内容
python爬虫使用正则爬取网站
首先定义几个函数,便于将各个步骤的工作分开便于代码管理,我这里是分成了7个函数,分别如下:
@主函数入口

if __name__=="__main__":       #程序执行入口
main()

@捕获网页html内容 askURL(url)
这里的head的提取是在chrome中分析网页源码获得的,具体我也不做过多解释,大家可以百度

def askURL(url):  #得到指定网页信息的内容 #爬取一个网页的数据
# 用户代理,本质上是告诉服务器,我们是以什么样的机器来访问网站,以便接受什么样的水平数据
head={"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"}
request=urllib.request.Request(url,headers=head) #request对象接受封装的信息,通过urllib携带headers访问信息访问url
response=urllib.request.urlopen(request) #用于接收返回的网页信息
html=response.read().decode("utf-8") #通过read方法读取response对象里的网页信息,使用“utf-8”
return html #返回捕获的网页内容,此时还是未处理过的

@将baseurl里的内容进行逐一解析 getData(baseURL)
这里面的findlink和findname是正则表达式,可以首先定义全局变量

findlink=r'<a class="" href="(.*?)"'
findname=r'<span class="title">(.*?)</span>'

def getData(baseURL):
dataList=[] #初始化datalist用于存储获取到的数据
for i in range(0,10):
url=baseURL+str(i*25)
html=askURL(url) #保存获取到的源码
soup=BeautifulSoup(html,"html.parser") #对html进行逐一解析,使用html.parser解析器进行解析
for item in soup.find_all("div",class_="item"): #查找符合要求的字符串 ,形成列表,find_all是查找所有的class是item的div
data=[] #初始化data,用于捕获一次爬取一个div里面的内容
item=str(item) #将item数据类型转化为字符串类型
# print(item)
link=re.findall(findlink,item)[0] #使用re里的findall方法根据正则提取item里面的电影链接
data.append(link) #将网页链接追加到data里
name=re.findall(findname,item)[0] #使用re里的findall方法根据正则提取item里面的电影名字
data.append(name) #将电影名字链接追加到data里
# print(link)
# print(name)
dataList.append(data) #将捕获的电影链接和电影名存到datalist里面
return dataList #返回一个列表,里面存放的是每个电影的信息
print(dataList)

@保存捕获的数据到excel saveData(dataList,savepath)

def saveData(dataList,savepath):                            #保存捕获的内容到excel里,datalist是捕获的数据列表,savepath是保存路径
book=xlwt.Workbook(encoding="utf-8",style_compression=0)#初始化book对象,这里首先要导入xlwt的包
sheet=book.add_sheet("test",cell_overwrite_ok=True) #创建工作表
col=["电影详情链接","电影名称"] #列名
for i in range(0,2):
sheet.write(0,i,col[i]) #将列名逐一写入到excel
for i in range(0,250):
data=dataList[i] #依次将datalist里的数据获取
for j in range(0,2):
sheet.write(i+1,j,data[j]) #将data里面的数据逐一写入
book.save(savepath)

@保存捕获的数据到数据库

def saveDataDb(dataList,dbpath):
initDb(dbpath) #用一个函数初始化数据库
conn=sqlite3.connect(dbpath) #初始化数据库
cur=conn.cursor() #获取游标
for data in dataList:
for index in range(len(data)):
data[index]='"'+data[index]+'" ' #将每条数据都加上""
#每条数据之间用,隔开,定义sql语句的格式
sql='''
insert into test(link,name) values (%s)
'''%','.join (data)
cur.execute(sql) #执行sql语句
conn.commit() #提交数据库操作
conn.close()
print("爬取存入数据库成功!")

@初始化数据库 initDb(dbpath)


def initDb(dbpath):
conn=sqlite3.connect(dbpath)
cur=conn.cursor()
sql='''
create table test(
id integer primary key autoincrement,
link text,
name varchar

)
'''
cur.execute(sql)
conn.commit()
cur.close()
conn.close()

@main函数,用于调用其他函数 main()

def main():
dbpath="testSpider.db" #用于指定数据库存储路径
savepath="testSpider.xls" #用于指定excel存储路径
baseURL="https://movie.douban.com/top250?start=" #爬取的网页初始链接
dataList=getData(baseURL)
saveData(dataList,savepath)
saveDataDb(dataList,dbpath)

点击运行就可以看到在左侧已经生成了excel和DB文件
python爬虫使用正则爬取网站
excel可以直接打开
python爬虫使用正则爬取网站
DB文件双击之后会在右边打开
python爬虫使用正则爬取网站

到这里爬虫的基本内容就已经结束了,如果有什么不懂或者想交流的地方可以加我 qq 1540741344

以下附上整个代码

import re                                   #网页解析,获取数据
from bs4 import BeautifulSoup #正则表达式,进行文字匹配
import urllib.request,urllib.error #制定URL,获取网页数据
import xlwt
import sqlite3

findlink=r'<a class="" href="(.*?)"'
findname=r'<span class="title">(.*?)</span>'
def main():
dbpath="testSpider.db" #用于指定数据库存储路径
savepath="testSpider.xls" #用于指定excel存储路径
baseURL="https://movie.douban.com/top250?start=" #爬取的网页初始链接
dataList=getData(baseURL)
saveData(dataList,savepath)
saveDataDb(dataList,dbpath)
def askURL(url): #得到指定网页信息的内容 #爬取一个网页的数据
# 用户代理,本质上是告诉服务器,我们是以什么样的机器来访问网站,以便接受什么样的水平数据
head={"User-Agent":"Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89 Safari / 537.36"}
request=urllib.request.Request(url,headers=head) #request对象接受封装的信息,通过urllib携带headers访问信息访问url
response=urllib.request.urlopen(request) #用于接收返回的网页信息
html=response.read().decode("utf-8") #通过read方法读取response对象里的网页信息,使用“utf-8”
return html #返回捕获的网页内容,此时还是未处理过的
def getData(baseURL):
dataList=[] #初始化datalist用于存储获取到的数据
for i in range(0,10):
url=baseURL+str(i*25)
html=askURL(url) #保存获取到的源码
soup=BeautifulSoup(html,"html.parser") #对html进行逐一解析,使用html.parser解析器进行解析
for item in soup.find_all("div",class_="item"): #查找符合要求的字符串 ,形成列表,find_all是查找所有的class是item的div
data=[] #初始化data,用于捕获一次爬取一个div里面的内容
item=str(item) #将item数据类型转化为字符串类型
# print(item)
link=re.findall(findlink,item)[0] #使用re里的findall方法根据正则提取item里面的电影链接
data.append(link) #将网页链接追加到data里
name=re.findall(findname,item)[0] #使用re里的findall方法根据正则提取item里面的电影名字
data.append(name) #将电影名字链接追加到data里
# print(link)
# print(name)
dataList.append(data) #将捕获的电影链接和电影名存到datalist里面
return dataList #返回一个列表,里面存放的是每个电影的信息
print(dataList)

def saveData(dataList,savepath): #保存捕获的内容到excel里,datalist是捕获的数据列表,savepath是保存路径
book=xlwt.Workbook(encoding="utf-8",style_compression=0)#初始化book对象,这里首先要导入xlwt的包
sheet=book.add_sheet("test",cell_overwrite_ok=True) #创建工作表
col=["电影详情链接","电影名称"] #列名
for i in range(0,2):
sheet.write(0,i,col[i]) #将列名逐一写入到excel
for i in range(0,250):
data=dataList[i] #依次将datalist里的数据获取
for j in range(0,2):
sheet.write(i+1,j,data[j]) #将data里面的数据逐一写入
book.save(savepath) #保存excel文件

def saveDataDb(dataList,dbpath):
initDb(dbpath) #用一个函数初始化数据库
conn=sqlite3.connect(dbpath) #初始化数据库
cur=conn.cursor() #获取游标
for data in dataList:
for index in range(len(data)):
data[index]='"'+data[index]+'" ' #将每条数据都加上""
#每条数据之间用,隔开,定义sql语句的格式
sql='''
insert into test(link,name) values (%s)
'''%','.join (data)
cur.execute(sql) #执行sql语句
conn.commit() #提交数据库操作
conn.close()
print("爬取存入数据库成功!")
def initDb(dbpath):
conn=sqlite3.connect(dbpath)
cur=conn.cursor()
sql='''
create table test(
id integer primary key autoincrement,
link text,
name varchar

)
'''
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
if __name__=="__main__": #程序执行入口
main()

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

python爬虫使用正则爬取网站

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » python爬虫使用正则爬取网站
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏