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

1.爬蟲基礎(chǔ)

1.1獲取網(wǎng)址

url='https://www.baidu.com'
response=requests.get(url)

1.2獲取str類型的響應(yīng)

print(response.text)

1.3獲取bytes類型的響應(yīng)

print(response.content)

1.4獲取響應(yīng)頭

print(response.headers)

1.5獲取狀態(tài)碼

print(response.status_code)

1.6響應(yīng)頭用以偽裝成瀏覽器

#沒有添加響應(yīng)頭
# resp=requests.get('https://www.zhihu.com/')
# print(resp.status_code)
#運(yùn)行返回400

#使用字典定義請(qǐng)求頭
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
resp=requests.get('https://pvp.qq.com/')
print(resp.status_code)
#運(yùn)行返回200

2.靜態(tài)網(wǎng)頁爬蟲

2.1導(dǎo)入lxml庫

from lxml import html

2.2打開并讀取本地html文件

with open('./index.html','r',encoding='utf-8') as f:
    html_data=f.read()
    print(html_data)

2.3解析html文件,獲取selector對(duì)象

    selector =html.fromstring(html_data)
    #要獲取標(biāo)簽內(nèi)容署浩,末尾要添加text()
    h1=selector.xpath('/html/body/h1/text()')
    print(h1[0])

2.4//表示可以代表任意位置出發(fā)

#//標(biāo)簽1[@屬性=屬性值]/標(biāo)簽2[@屬性=屬性值]..../text()
a=selector.xpath('//div[@id="container"]/a/text()')
print(a)

3.動(dòng)態(tài)網(wǎng)頁爬蟲(當(dāng)當(dāng)網(wǎng)和電影網(wǎng))

3.1導(dǎo)入庫

import requests
from lxml import html
import pandas as pd
from matplotlib import pyplot as plt

3.2設(shè)置響應(yīng)頭和url

瀏覽器中按f12揉燃,點(diǎn)擊network,刷新界面筋栋,下面的name中隨意選取查看右邊信息的User-Agent

def spider_dangdang(isbn):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
#裝圖書信息的list
    book_list = []
    #目標(biāo)站點(diǎn)地址
    url='http://search.dangdang.com/?key={}&act=input'.format(isbn)

3.3獲取站點(diǎn)str類型的響應(yīng)

    resp=requests.get(url,headers=headers)
    html_data=resp.text

3.4提取目標(biāo)站所有圖書信息

   selector=html.fromstring(html_data)
   ul_list=selector.xpath('//div[@id="search_nature_rg"]/ul/li')
   print('共有{}家店鋪售賣此書'.format(len(ul_list)))

3.5遍歷信息獲取想要的數(shù)據(jù)

    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('¥', ''))
        # print(price)
        #圖書賣家名稱
        store =li.xpath('./p[@class="search_shangjia"]/a/text()')
        # if len(store)==0:
        #     store='當(dāng)當(dāng)自營'
        store='當(dāng)當(dāng)自營' if len(store) ==0 else store[0]
        #添加每個(gè)商家的圖書信息
        book_list.append({
            'title':title,
            'link':link,
            'price':price,
            'store':store
        })
 #排序
    book_list.sort(key=lambda x:x['price'])

3.6獲取銷量最高的10家繪制柱狀圖

 #展示價(jià)格最低的10家 柱狀圖
    top10_store=[book_list[i] for i in range(10)]
    # x=[]
    # for stroe in top10_store:
    #     x.append(store['store'])
    x=[x['store'] for x in top10_store]
    y=[x['price'] for x in top10_store]
    plt.barh(x,y)
    plt.show()

3.7存儲(chǔ)成csv文件

    df=pd.DataFrame(book_list)
    df.to_csv('dangdang.csv')
#以上步驟均是在函數(shù)spider_dangdang中執(zhí)行

3.8調(diào)用函數(shù)

#要查詢的圖書的編號(hào)9787115428028
spider_dangdang('9787115428028')

4.對(duì)豆瓣網(wǎng)爬蟲

#電影名炊汤,上映日期,類型弊攘,上映國家抢腐,想看人數(shù)
#根據(jù)想看人數(shù)進(jìn)行排序
#繪制即將上映電影國家的占比圖
#繪制top5最想看的電影

#請(qǐng)求遠(yuǎn)程端站點(diǎn)
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

counts={}
# 目標(biāo)站點(diǎn)地址
def spider_douban():
    movie_list=[]
    url = 'https://movie.douban.com/cinema/later/chongqing/'
    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="showing-soon"]/div/div')
    print('您好,共有{}部電影即將在重慶上映'.format(len(ul_list)))

    # 遍歷ul_list
    for li in ul_list:
        # 電影名稱
        title = li.xpath('./h3/a/text()')[0].strip()
        print(title)
        # 上映日期
        date = li.xpath('./ul/li/text()')[0]
        print(date)
        # 類型
        type = li.xpath('./ul/li/text()')[1]
        print(type)

        # 上映國家
        country = li.xpath('./ul/li/text()')[2]
        print(country)
        # 想看人數(shù)
        num = li.xpath('./ul/li/span/text()')[0]
        print(num)
        num = int(num.replace('人想看', ''))

        #添加電影信息
        movie_list.append({
            'title':title,
            'date': date,
            'type':type,
            'country':country,
            'num':num
        })

    #按照人數(shù)進(jìn)行排序
    movie_list.sort(key=lambda x:x['num'],reverse=True)

    #遍歷booklist
    for movie in movie_list:
        print(movie)

    #畫餅圖襟交,把國家提取出來
    city=[]
    # 提取國家信息
    for country in movie_list:
        city.append((country['country']))

    # 將國家信息匯總
    for country in city:
        if len(country) <= 1:
            continue
        else:
            counts[country] = counts.get(country, 0) + 1
    items = list(counts.items())
    print(items)

    movie_name=[]
    people=[]
    for i in range(4):
        role, count = items[i]
        print(role, count)
        movie_name.append(role)
        people.append(count)


     #繪制即將上映電影國家的占比圖迈倍,餅圖

    explode = [0.1, 0, 0, 0]
    plt.pie(people, explode=explode,labels=movie_name, shadow=True, autopct='%1.1f%%')
    plt.axis('equal')  # 保證餅狀圖是正圓承匣,否則會(huì)有點(diǎn)扁
    plt.show()


    # 展示最想看的前5家础嫡,柱狀圖
    # 電影名稱
    top5_movie = [movie_list[i] for i in range(5)]
    print(top5_movie)
    x = [x['title'] for x in top5_movie]
    print(x)
    # 想看人數(shù)
    y = [x['num'] for x in top5_movie]
    print(y)

    plt.bar(x,y)
    #plt.barh(x,y)
    plt.show()
    存儲(chǔ)成csv文件
    df = pd.DataFrame(movie_list)
    df.to_csv('douban.csv')

spider_douban()

5.電影網(wǎng)爬蟲

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_film():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
    film_list = []
    #目標(biāo)站點(diǎn)地址

    url='https://movie.douban.com/cinema/later/chongqing/'
    #獲取站點(diǎn)str類型的響應(yīng)
    resp=requests.get(url,headers=headers)
    html_data=resp.text

    #提取目標(biāo)站信息
    selector=html.fromstring(html_data)
    ul_list=selector.xpath('//div[@id="showing-soon"]/div')
    print('您好,共有{}部電影'.format(len(ul_list)))

    #遍歷 ul_list
    for div in ul_list:
        #電影名
        title=div.xpath('./div/h3/a/text()')[0]
        print(title)
        #上映日期
        date=div.xpath('./div/ul/li/text()')[0]
        print(date)
        #類型
        style=div.xpath('./div/ul/li/text()')[1]
        print(style)
        #上映國家
        state =div.xpath('./div/ul/li/text()')[2]
        print(state)
        #想看人數(shù)
        want_people = div.xpath('./div/ul/li[@class="dt last"]/span/text()')[0]
        want_people = int(want_people.replace('人想看', ''))
        print(want_people)

        #添加每個(gè)電影的圖書信息
        film_list.append({
            'title':title,
            'date':date,
            'style':style,
            'state':state,
            'want_people':want_people
        })
  #排序
    film_list.sort(key=lambda x:x['want_people'])

  #展示價(jià)格最低的10家 柱狀圖
    top5_film=[film_list[i] for i in range(5)]

    x=[x['title'] for x in top5_film]
    y=[x['want_people'] for x in top5_film]
    plt.barh(x,y)
    plt.show()

#  調(diào)用函數(shù)
spider_film()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末投剥,一起剝皮案震驚了整個(gè)濱河市焕梅,隨后出現(xiàn)的幾起案子迹鹅,更是在濱河造成了極大的恐慌,老刑警劉巖贞言,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斜棚,死亡現(xiàn)場離奇詭異,居然都是意外死亡该窗,警方通過查閱死者的電腦和手機(jī)打肝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挪捕,“玉大人粗梭,你說我怎么就攤上這事〖读悖” “怎么了断医?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵滞乙,是天一觀的道長。 經(jīng)常有香客問我鉴嗤,道長斩启,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任醉锅,我火速辦了婚禮兔簇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘硬耍。我一直安慰自己垄琐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布经柴。 她就那樣靜靜地躺著狸窘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坯认。 梳的紋絲不亂的頭發(fā)上翻擒,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音牛哺,去河邊找鬼陋气。 笑死,一個(gè)胖子當(dāng)著我的面吹牛引润,可吹牛的內(nèi)容都是我干的巩趁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椰拒,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼晶渠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燃观,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤褒脯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后缆毁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體番川,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年脊框,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颁督。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浇雹,死狀恐怖沉御,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昭灵,我是刑警寧澤吠裆,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布伐谈,位于F島的核電站,受9級(jí)特大地震影響试疙,放射性物質(zhì)發(fā)生泄漏诵棵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一祝旷、第九天 我趴在偏房一處隱蔽的房頂上張望履澳。 院中可真熱鬧,春花似錦怀跛、人聲如沸距贷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽储耐。三九已至羊初,卻和暖如春滨溉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背长赞。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工晦攒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人得哆。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓脯颜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贩据。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栋操,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 爬蟲——大數(shù)據(jù) 1. 提取本地HTML中的數(shù)據(jù) 1. 新建index.html文件 2. 讀取HTML文件 需要安...
    婉兒吖閱讀 349評(píng)論 0 0
  • 1、爬蟲一些知識(shí) (1)節(jié)點(diǎn)選擇語法 XPath使用路徑表達(dá)式來選取XML文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集饱亮。這些路徑表達(dá)式和...
    小烏龜快點(diǎn)跑吖閱讀 343評(píng)論 0 0
  • python學(xué)習(xí)的第四天 爬蟲 1.結(jié)點(diǎn)選擇語法 2.Requests 注:無requests即下載安裝:pip ...
    古喬萌閱讀 171評(píng)論 0 0
  • 爬蟲 爬蟲(又被稱為網(wǎng)頁蜘蛛矾芙,網(wǎng)絡(luò)機(jī)器人),它是一種按照一定的規(guī)則近上,自動(dòng)地抓取互聯(lián)網(wǎng)信息的程序或者腳本剔宪。也即它是一...
    小頴子閱讀 205評(píng)論 0 0
  • “五十八、五十九壹无、六十葱绒,唉,終于做完了”斗锭,小明數(shù)著做完了六十個(gè)俯臥撐站起來地淀,突然想起來今天抽了3根煙,于是又換了運(yùn)...
    康萌故事閱讀 277評(píng)論 0 0