1. 程式人生 > >利用urllib和BeautifulSoup基於python3的爬蟲demo

利用urllib和BeautifulSoup基於python3的爬蟲demo

京東金融標題:

# 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,一個不帶