Python學(xué)習(xí)第四天

爬蟲----大數(shù)據(jù)

XPath語法和lxml模塊

一搂鲫、 提取本地html中的數(shù)據(jù)

  1. 新建html文件
  2. 讀取
  3. 使用xpath語法進(jìn)行提取
  • 使用 lxml 中的xpath
  • 使用lxml提取 h1標(biāo)簽中的內(nèi)容

.py文件

from lxml import html
# 讀取html文件
with open('./index.html', 'r', encoding='utf-8') as f:
    html_data = f.read()
    # print(html_data)
    # 解析html文件,獲得selector對(duì)象
    selector = html.fromstring(html_data)
    # selector中調(diào)用xpath方法
    # 要獲取標(biāo)簽中的內(nèi)容每币,末尾要添加text()
    h1 = selector.xpath('/html/body/h1/text()')
    print(h1[0])

    # // 可以代表從任意位置出發(fā)创倔、
    # //標(biāo)簽1[@屬性=屬性值]/標(biāo)簽2[@屬性=屬性值]..../text()
    a = selector.xpath('//div[@id="container"]/a/text()')
    print(a)
    # 獲取 p標(biāo)簽的內(nèi)容
    p = selector.xpath('//div[@id="container"]/p/text()')
    print(p)

index.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>歡迎來到王者榮耀</h1>
<ul>
    <li><a ><img src="https://game.gtimg.cn/images/yxzj/img201606/heroimg/508/508.jpg" alt="">伽羅</a></li>
    <li><img src="" alt="">孫策/li>
    <li>鎧</li>
    <li>虞姬</li>
</ul>

<ol>
    <li>坦克</li>
    <li>戰(zhàn)士</li>
    <li>刺客</li>
</ol>
<!--div + css 布局-->
<div>這是div標(biāo)簽</div>
<div id="container">
    <p>被動(dòng):伽羅的普攻與技能傷害將會(huì)優(yōu)先對(duì)目標(biāo)的護(hù)盾效果造成一次等額的傷害</p>
    <a >點(diǎn)擊跳轉(zhuǎn)至百度</a>
</div>
<div>這是第二個(gè)div標(biāo)簽</div>

</body>
</html>

運(yùn)行結(jié)果

運(yùn)行結(jié)果
index網(wǎng)頁

二嗡害、 獲取當(dāng)當(dāng)網(wǎng)數(shù)據(jù)

代碼如下:


import requests
from lxml import html
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def spider_dangdang(isbn):
    book_list = []
    # 目標(biāo)站點(diǎn)地址
    url = 'http://search.dangdang.com/?key={}&act=input'.format(isbn)
    # print(url)
    # 獲取站點(diǎn)str類型的響應(yīng)
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}

    resp = requests.get(url, headers=headers)
    html_data = resp.text
    #  將html頁面寫入本地
    with open('dangdang.html', 'w', encoding='utf-8') as f:
         f.write(html_data)

    # 提取目標(biāo)站的信息
    selector = html.fromstring(html_data)
    ul_list = selector.xpath('//div[@id="search_nature_rg"]/ul/li')
    print('您好,共有{}家店鋪售賣此圖書'.format(len(ul_list)))

    # 遍歷 ul_list
    for li in ul_list:
        #  圖書名稱
        title = li.xpath('./a/@title')[0].strip()
        # print(title)
        #  圖書購買鏈接
        link = li.xpath('a/@href')[0]
        # print(link)
        #  圖書價(jià)格
        price = li.xpath('./p[@class="price"]/span[@class="search_now_price"]/text()')[0]
        #price = float(price.replace('¥',' '))
        price = price.replace('¥', '')
        # print(price)
        # 圖書賣家名稱
        store = li.xpath('./p[@class="search_shangjia"]/a/text()')
        # if len(store) == 0:
        #     store = '當(dāng)當(dāng)自營'
        # else:
        #     store = store[0]
        store = '當(dāng)當(dāng)自營' if len(store) == 0 else store[0]
        # print(store)

        # 添加每一個(gè)商家的圖書信息
        book_list.append({
            'title':title,
            'price':price,
            'link':link,
            'store':store
        })


    # 按照價(jià)格進(jìn)行排序
    book_list.sort(key=lambda x:x['price'])

    # 遍歷booklist
    for book in book_list:
        print(book)

    # 展示價(jià)格最低的前10家 柱狀圖
    # 店鋪的名稱
    top10_store = [book_list[i] for i in range(12)]
    # x = []
    # for store in top10_store:
    #     x.append(store['store'])
    x = [x['store'] for x in top10_store]
    print(x)
    # 圖書的價(jià)格
    y = [x['price'] for x in top10_store]
    print(y)
    #plt.bar(x, y)
    plt.barh(x, y)
    plt.show()


    # 存儲(chǔ)成csv文件


    df = pd.DataFrame(book_list)
    df.to_csv('dangdang.csv')

spider_dangdang('9787115428028')

運(yùn)行結(jié)果:

當(dāng)當(dāng)網(wǎng)TOP10

三三幻、 練習(xí)

提取https://movie.douban.com/cinema/later/chongqing網(wǎng)站以下信息就漾,并且根據(jù)信息完成3,4效果
1.電影名念搬,上映日期抑堡,類型,上映國家朗徊,想看人數(shù)
2.根據(jù)想看人數(shù)進(jìn)行排序
3.繪制即將上映電影國家的占比圖
4.繪制top5最想看的電影

代碼如下:

import  requests
from  lxml import html
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
url='https://movie.douban.com/cinema/later/chongqing/'

resp = requests.get(url)
#獲取站點(diǎn)str類型的
html_data=resp.text
# 提取目標(biāo)站點(diǎn)的信息
selector = html.fromstring(html_data)
movie_info=selector.xpath('//div[@id="showing-soon"]/div')
#print(html_data)
print('你好首妖,共有{}電影即將上映'.format(len(movie_info)))
movie_info_list=[]
for movie in movie_info:
    #電影名
    movie_name=movie.xpath('./div/h3/a/text()')[0]
    # print(movie_name)
    #上映日期
    movie_date=movie.xpath('./div/ul/li[1]/text()')[0]
    # print(movie_date)
    #電影類型
    movie_type=movie.xpath('./div/ul/li[2]/text()')[0]
    movie_type=str(movie_type)
    movie_type=movie_type.split(' / ')
    # print(type(movie_type))
    #print(movie_type)

    #上映國家
    movie_nation=movie.xpath('./div/ul/li[3]/text()')[0]
    # print(movie_nation)

    #想看人數(shù)
    movie_want = movie.xpath('./div/ul/li[4]/span/text()')[0]
    movie_want=int(movie_want.replace('人想看',''))
    # print(movie_want)

    #添加信息到列表
    movie_info_list.append({
        'name':movie_name,
        'date':movie_date,
        'type':movie_type,
        'nation':movie_nation,
        'want':movie_want
    })

#根據(jù)想看人數(shù)進(jìn)行排序
movie_info_list.sort(key=lambda x : x['want'],reverse=True)
counts={}
# 繪制即將上映電影國家的占比圖(餅圖)
#計(jì)算上映國家的電影片數(shù)
for nation in movie_info_list:
    counts[nation['nation']] = counts.get(nation['nation'], 0) + 1
#將字典轉(zhuǎn)換為列表
items = list(counts.items())
print(items)
# 取出繪制餅圖的數(shù)據(jù)和標(biāo)簽
co=[]
lables=[]
for i in range(len(items)):
    role, count = items[i]
    co.append(count)
    lables.append(role)

explode = [0.1, 0, 0, 0]
plt.pie(co, shadow=True,explode=explode, labels=lables, autopct = '%1.1f%%')
plt.legend(loc=2)
plt.axis('equal')
plt.show()
#繪制top5最想看的電影(柱狀圖)

#電影名稱
x = [movie_info_list[i]['name'] for i in range(5)]

# top5 = [movie_info_list[i] for i in range(5)]
# x = [x['name'] for x in top5]
#想看人數(shù)
y = [movie_info_list[i]['want'] for i in range(5)]
# y = [y['want'] for y in top5]


print(x)
print(y)
plt.xlabel('電影名稱')
plt.ylabel('想看人數(shù)(人)')

plt.bar(x, y)
plt.show()

運(yùn)行結(jié)果:

運(yùn)行結(jié)果1
運(yùn)行結(jié)果2

運(yùn)行結(jié)果3
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爷恳,隨后出現(xiàn)的幾起案子有缆,更是在濱河造成了極大的恐慌,老刑警劉巖温亲,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚壁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡栈虚,警方通過查閱死者的電腦和手機(jī)袖外,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂务,“玉大人曼验,你說我怎么就攤上這事泌射。” “怎么了鬓照?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵熔酷,是天一觀的道長。 經(jīng)常有香客問我豺裆,道長拒秘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任臭猜,我火速辦了婚禮翼抠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘获讳。我一直安慰自己,他們只是感情好活喊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布丐膝。 她就那樣靜靜地躺著,像睡著了一般钾菊。 火紅的嫁衣襯著肌膚如雪帅矗。 梳的紋絲不亂的頭發(fā)上邮辽,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天搂捧,我揣著相機(jī)與錄音,去河邊找鬼对人。 笑死滞详,一個(gè)胖子當(dāng)著我的面吹牛凛俱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播料饥,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒲犬,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了岸啡?” 一聲冷哼從身側(cè)響起原叮,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤巡蘸,失蹤者是張志新(化名)和其女友劉穎奋隶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悦荒,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唯欣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逾冬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黍聂。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躺苦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出产还,到底是詐尸還是另有隱情匹厘,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布脐区,位于F島的核電站愈诚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏牛隅。R本人自食惡果不足惜炕柔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望媒佣。 院中可真熱鬧匕累,春花似錦、人聲如沸默伍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽也糊。三九已至炼蹦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間狸剃,已是汗流浹背掐隐。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钞馁,地道東北人虑省。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像僧凰,于是被迫代替她去往敵國和親慷妙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容