利用urllib和BeautifulSoup基於python3的爬蟲demo
阿新 • • 發佈:2019-02-12
京東金融標題:
# coding=utf-8 from urllib.request import urlopen from bs4 import BeautifulSoup # 開啟url,獲取HTML內容 html = urlopen("http://jr.jd.com") # 找到所選標籤 bs_obj = BeautifulSoup(html.read(), "html.parser") text_list = bs_obj.find_all("a", "nav-item-primary") for text in text_list: print(text.get_text()) html.close()
結果:
首頁
財富
眾籌
保險
白條
股票
東家財富
企業金融
金融雲
城市計算
網易歌單:
# -*- coding:utf-8 -*- from selenium import webdriver import csv # 網易雲音樂歌單第一頁的url url = 'https://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0' # 用PhantomJS介面建立一個Selenium的webdriver driver = webdriver.PhantomJS() # 準備好儲存歌單csv csv_file = open("playlist.csv", "w", newline='', encoding='utf-8-sig') writer = csv.writer(csv_file) writer.writerow(['標題', '播放數', '連結']) # 解析每一頁,直到‘下一頁’為空 while url != 'javascript:void(0)': # 用webDriver載入頁面 driver.get(url) # 切換到內容的iframe driver.switch_to.frame("contentFrame") # 定位歌單標籤 data = driver.find_element_by_id("m-pl-container").find_elements_by_tag_name("li") # 解析一頁中所有歌單 for i in range(len(data)): # 獲取播放數 nb = 0 if data[i].find_element_by_class_name("nb"): nb = data[i].find_element_by_class_name("nb").text if '萬' in nb and int(nb.split("萬")[0]) > 1000: # 獲取播放數大於500萬的歌單的封面 msk = data[i].find_element_by_css_selector("a.msk") # 把封面上的標題和連結連同播放數一起寫到檔案中 writer.writerow([msk.get_attribute('title'), nb, msk.get_attribute('href')]) # 定位'下一頁'的url url = driver.find_element_by_css_selector("a.zbtn.znxt").get_attribute('href') csv_file.close()
結果:
標題,播放數,連結 你的青春裡有沒有屬於你的一首歌?,5260萬,https://music.163.com/playlist?id=2201879658 耳朵喜歡你 好聽到可以單曲迴圈,4222萬,https://music.163.com/playlist?id=2232237850 2018上半年最熱新歌TOP50,1588萬,https://music.163.com/playlist?id=2303649893 〖純音樂〗輕旋淡律,也可以抓住你的耳朵,1114萬,https://music.163.com/playlist?id=2235097256 失戀必聽歌單 | 因為你突然聽懂了很多歌,1332萬,https://music.163.com/playlist?id=2385384236 【經典】聼一首老歌,想念一段時光,1366萬,https://music.163.com/playlist?id=2236351380 單循輯|我想和你共享耳機,2272萬,https://music.163.com/playlist?id=2337333174 予你情詩百首,餘生你是我的所有,2208萬,https://music.163.com/playlist?id=2230318386 這麼熱的天 當然要勤洗頭啦,1091萬,https://music.163.com/playlist?id=2258899307 “以前喜歡一個人,現在喜歡一個人”,1121萬,https://music.163.com/playlist?id=2329680016 歐美精選 | 嗨 夥計 要來首10w+嗎?,1041萬,https://music.163.com/playlist?id=2301227992 攢了一大堆好聽的歌想和你一起聽,3447萬,https://music.163.com/playlist?id=2353471182 這世界上情歌那麼多,卻沒有一首屬於我,1812萬,https://music.163.com/playlist?id=2335662972 2018年十月最熱新歌TOP50,1373萬,https://music.163.com/playlist?id=2494952275 別急,甜甜的戀愛馬上就輪到你了,1667萬,https://music.163.com/playlist?id=2430524968 聽說你也在找好聽的華語歌,1521萬,https://music.163.com/playlist?id=2438292020 翻唱比原唱好聽系列(個人向),1125萬,https://music.163.com/playlist?id=2250548490 最是粵語最為情深 也唯獨你最難忘懷,1280萬,https://music.163.com/playlist?id=2388322013 提神醒腦 瘋狂抖腿魔性搖頭.GIF,1251萬,https://music.163.com/playlist?id=2364146680
注意:
1.亂碼問題:
csv_file = open("playlist.csv", "w", newline='', encoding='utf-8-sig')
//encoding='utf-8-sig' 避免寫入亂碼
2.url的http是否帶s
3.find_elements_by_tag_name與find_elements_by_tag_name的區別,一個帶s,一個不帶