百度飛槳學習——七日打卡作業(二)選手信息爬取
文章目錄
百度飛槳學習——七日打卡作業(二)選手信息爬取
上網的全過程
普通用戶
爬蟲程序
爬蟲的過程
使用的模塊
爬取百度百科中《青春有你2》中所有參賽選手信息,返回頁面數據
對爬取的頁面數據進行解析,并保存為JSON文件
爬取每個選手的百度百科圖片,并進行保存
打印爬取的所有圖片的路徑
輸出
上網的全過程
普通用戶
打開瀏覽器

往目標站點發送請求
接收響應數據
渲染到頁面上
打開瀏覽器
往目標站點發送請求
接收響應數據
渲染到頁面上
爬蟲程序
模擬瀏覽器
往目標站點發送請求
接收響應數據
提取有用的數據
保存到本地或數據庫
模擬瀏覽器
往目標站點發送請求
接收響應數據
提取有用的數據
保存到本地或數據庫
爬蟲的過程
requests模塊
服務器返回
BeautifulSoup查找或者re正則
發送請求
獲取響應數據
解析并提取數據
保存數據
requests模塊
服務器返回
BeautifulSoup查找或者re正則
發送請求
獲取響應數據
解析并提取數據
保存數據
使用的模塊
request模塊
requests是python實現的簡單易用的HTTP庫,官網地址:http://cn.python-requests.org/zh_CN/latest/ requests.get(url)可以發送一個http get請求,返回服務器響應內容。
BeautifulSoup庫
BeautifulSoup 是一個可以從HTML或XML文件中提取數據的Python庫。網址:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ BeautifulSoup支持Python標準庫中的HTML解析器,還支持一些第三方的解析器,其中一個是 lxml。 BeautifulSoup(markup, "html.parser")或者BeautifulSoup(markup, "lxml"),推薦使用lxml作為解析器,因為效率更高。
爬取百度百科中《青春有你2》中所有參賽選手信息,返回頁面數據
import json import re import requests import datetime from bs4 import BeautifulSoup import os #獲取當天的日期,并進行格式化,用于后面文件命名,格式:20200420 today = datetime.date.today().strftime('%Y%m%d') def crawl_wiki_data(): """ 爬取百度百科中《青春有你2》中參賽選手信息,返回html """ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } url='https://baike.baidu.com/item/青春有你第二季' try: response = requests.get(url,headers=headers) # print(response.status_code) #將一段文檔傳入BeautifulSoup的構造方法,就能得到一個文檔的對象, 可以傳入一段字符串 soup = BeautifulSoup(response.text,'lxml') #返回的是class為table-view log-set-param的
所有標簽 tables = soup.find_all('table',{'class':'table-view log-set-param'}) crawl_table_title = "參賽學員" for table in tables: #對當前節點前面的標簽和字符串進行查找 table_titles = table.find_previous('div').find_all('h3') for title in table_titles: if(crawl_table_title in title): return table except Exception as e: print(e)對爬取的頁面數據進行解析,并保存為JSON文件
def parse_wiki_data(table_html): ''' 從百度百科返回的html中解析得到選手信息,以當前日期作為文件名,存JSON文件,保存到work目錄下 ''' bs = BeautifulSoup(str(table_html),'lxml') all_trs = bs.find_all('tr') error_list = ['\'','\"'] stars = [] for tr in all_trs[1:]: all_tds = tr.find_all('td') star = {} #姓名 star["name"]=all_tds[0].text #個人百度百科鏈接 star["link"]= 'https://baike.baidu.com' + all_tds[0].find('a').get('href') #籍貫 star["zone"]=all_tds[1].text #星座 star["constellation"]=all_tds[2].text #身高 star["height"]=all_tds[3].text #體重 star["weight"]= all_tds[4].text #花語,去除掉花語中的單引號或雙引號 flower_word = all_tds[5].text for c in flower_word: if c in error_list: flower_word=flower_word.replace(c,'') star["flower_word"]=flower_word #公司 if not all_tds[6].find('a') is None: star["company"]= all_tds[6].find('a').text else: star["company"]= all_tds[6].text stars.append(star) json_data = json.loads(str(stars).replace("\'","\"")) with open('work/' + today + '.json', 'w', encoding='UTF-8') as f: json.dump(json_data, f, ensure_ascii=False)
爬取每個選手的百度百科圖片,并進行保存
def crawl_pic_urls(): ''' 爬取每個選手的百度百科圖片,并保存 ''' with open('work/'+ today + '.json', 'r', encoding='UTF-8') as file: json_array = json.loads(file.read()) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } for star in json_array: name = star['name'] link = star['link'] pic_urls = [] #預先設定一個空列表作為存儲圖片鏈接地址 #!!!請在以下完成對每個選手圖片的爬取,將所有圖片url存儲在一個列表pic_urls中!!! response = requests.get(link,headers=headers) soup = BeautifulSoup(response.text,'lxml') urls = soup.select('.summary-pic a')[0].get('href')#獲取圖集地址 urls = 'https://baike.baidu.com'+urls pic_response = requests.get(urls,headers = headers) soup = BeautifulSoup(pic_response.text,'lxml') pic_list = soup.select('.pic-list img ') for pic in pic_list: url = pic.get('src') pic_urls.append(url) down_pic(name,pic_urls)
def down_pic(name,pic_urls): ''' 根據圖片鏈接列表pic_urls, 下載所有圖片,保存在以name命名的文件夾中, ''' path = 'work/'+'pics/'+name+'/' if not os.path.exists(path): os.makedirs(path) for i, pic_url in enumerate(pic_urls): try: pic = requests.get(pic_url, timeout=15) string = str(i + 1) + '.jpg' with open(path+string, 'wb') as f: f.write(pic.content) # print('成功下載第%s張圖片: %s' % (str(i + 1), str(pic_url))) except Exception as e: print('下載第%s張圖片時失敗: %s' % (str(i + 1), str(pic_url))) print(e) continue
打印爬取的所有圖片的路徑
def show_pic_path(path): ''' 遍歷所爬取的每張圖片,并打印所有圖片的絕對路徑 ''' pic_num = 0 for (dirpath,dirnames,filenames) in os.walk(path): for filename in filenames: pic_num += 1 print("第%d張照片:%s" % (pic_num,os.path.join(dirpath,filename))) print("共爬取《青春有你2》選手的%d照片" % pic_num)
if __name__ == '__main__': #爬取百度百科中《青春有你2》中參賽選手信息,返回html html = crawl_wiki_data() #解析html,得到選手信息,保存為json文件 parse_wiki_data(html) #從每個選手的百度百科頁面上爬取圖片,并保存 crawl_pic_urls() #打印所爬取的選手圖片路徑 show_pic_path('/home/aistudio/work/pics/') print("所有信息爬取完成!")
輸出
...... 第465張照片:/home/aistudio/work/pics/孫芮/2.jpg 第466張照片:/home/aistudio/work/pics/孫芮/3.jpg 第467張照片:/home/aistudio/work/pics/孫芮/5.jpg 第468張照片:/home/aistudio/work/pics/孫芮/6.jpg 第469張照片:/home/aistudio/work/pics/孫芮/1.jpg 第470張照片:/home/aistudio/work/pics/孫芮/7.jpg 第471張照片:/home/aistudio/work/pics/孫芮/4.jpg 第472張照片:/home/aistudio/work/pics/王心茗/1.jpg 第473張照片:/home/aistudio/work/pics/劉雨昕/9.jpg 第474張照片:/home/aistudio/work/pics/劉雨昕/2.jpg 第475張照片:/home/aistudio/work/pics/劉雨昕/10.jpg 第476張照片:/home/aistudio/work/pics/劉雨昕/3.jpg 第477張照片:/home/aistudio/work/pics/劉雨昕/8.jpg 第478張照片:/home/aistudio/work/pics/劉雨昕/5.jpg 第479張照片:/home/aistudio/work/pics/劉雨昕/6.jpg 第480張照片:/home/aistudio/work/pics/劉雨昕/1.jpg 第481張照片:/home/aistudio/work/pics/劉雨昕/7.jpg 第482張照片:/home/aistudio/work/pics/劉雨昕/4.jpg 共爬取《青春有你2》選手的482照片 所有信息爬取完成!
HTML Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
亚洲国产专区一区|
亚洲av无一区二区三区|
亚洲成a人无码av波多野按摩|
亚洲第一成年网站大全亚洲|
久久香蕉国产线看观看亚洲片|
在线A亚洲老鸭窝天堂|
亚洲中文字幕无码爆乳av中文
|
综合亚洲伊人午夜网|
亚洲精品无码av天堂|
亚洲精品无码久久毛片|
亚洲国产小视频精品久久久三级|
久久精品国产亚洲av品善|
久久精品国产亚洲av品善|
国产亚洲视频在线观看网址|
亚洲国产av无码精品|
亚洲精品WWW久久久久久|
国产成人精品亚洲精品|
国产亚洲美女精品久久久2020|
国产午夜亚洲不卡|
人人狠狠综合久久亚洲婷婷|
亚洲av无码片在线播放|
亚洲国产成人久久精品动漫|
久久精品国产亚洲AV无码娇色|
亚洲综合在线观看视频|
亚洲欧洲日产专区|
亚洲jizzjizz在线播放久|
亚洲午夜福利在线视频|
亚洲av无码专区在线观看下载|
日韩亚洲综合精品国产|
国产国拍亚洲精品福利|
国产精品国产亚洲精品看不卡|
亚洲日本精品一区二区|
亚洲成人网在线观看|
国产亚洲精品bv在线观看|
亚洲av无码一区二区三区四区|
日韩精品电影一区亚洲|
国产亚洲人成网站在线观看|
亚洲Av无码专区国产乱码DVD|
99久久亚洲精品无码毛片|
久久久久精品国产亚洲AV无码|
亚洲精品无码少妇30P|