app.vue里使用data_Python爬虫使用正则爬取网站,正则都不会就别玩爬虫了!
本文章的所有代碼和相關文章, 僅用于經驗技術交流分享,禁止將相關技術應用到不正當途徑,濫用技術產生的風險與本人無關。本文章是自己學習的一些記錄。歡迎各位大佬點評!
源碼在GitHub上面,且相關介紹更加全面。鏈接如下https://github.com/zhazhalin/doubanTop250Spider.git或者點擊如下鏈接github鏈接地址首先今天是第一天寫博客,感受到了博客的魅力,博客不僅能夠記錄每天的代碼學習情況,并且可以當作是自己的學習筆記,以便在后面知識點不清楚的時候前來復習。這是第一次使用爬蟲爬取網頁,這里展示的是爬取豆瓣電影top250的整個過程,歡迎大家指點。
這里我只爬取了電影鏈接和電影名稱,如果想要更加完整的爬取代碼,請聯系我。qq 1540741344 或者點擊github鏈接地址 歡迎交流
開發工具: pycharm、chrome分析網頁在開發之前你首先要去你所要爬取的網頁提取出你要爬取的網頁鏈接,并且將網頁分析出你想要的內容。
在開發之前首先要導入幾個模塊,模塊描述如下,具體不知道怎么導入包的可以看我下一篇內容
首先定義幾個函數,便于將各個步驟的工作分開便于代碼管理,我這里是分成了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訪問信息訪問urlresponse=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]) #將列名逐一寫入到excelfor 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)你學會了嗎 獲取加群加群:1136192749
總結
以上是生活随笔為你收集整理的app.vue里使用data_Python爬虫使用正则爬取网站,正则都不会就别玩爬虫了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel 分页php_larave
- 下一篇: mysql.cnf utf8_mysql