电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python爬蟲使用正則爬取網站的實現

瀏覽:7日期:2022-07-15 13:19:27

本文章的所有代碼和相關文章, 僅用于經驗技術交流分享,禁止將相關技術應用到不正當途徑,濫用技術產生的風險與本人無關。

本文章是自己學習的一些記錄。歡迎各位大佬點評!

首先

今天是第一天寫博客,感受到了博客的魅力,博客不僅能夠記錄每天的代碼學習情況,并且可以當作是自己的學習筆記,以便在后面知識點不清楚的時候前來復習。這是第一次使用爬蟲爬取網頁,這里展示的是爬取豆瓣電影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='http://www.hdgsjgj.cn/bcjs/(.*?)'’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 xlwtimport sqlite3findlink=r’<a class='' href='http://www.hdgsjgj.cn/bcjs/(.*?)'’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()

到此這篇關于python爬蟲使用正則爬取網站的實現的文章就介紹到這了,更多相關python正則爬取內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 黑龙江京科脑康医院-哈尔滨精神病医院哪家好_哈尔滨精神科医院排名_黑龙江精神心理病专科医院 | 散热器厂家_暖气片_米德尔顿散热器| 菏泽知彼网络科技有限公司 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 桥架-槽式电缆桥架-镀锌桥架-托盘式桥架 - 上海亮族电缆桥架制造有限公司 | 服务器之家 - 专注于服务器技术及软件下载分享 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 浙江清风侠环保设备有限公司| 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 蜂蜜瓶-玻璃瓶-玻璃瓶厂-玻璃瓶生产厂家-徐州贵邦玻璃制品有限公司 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 |