中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么爬取當網書籍數據并數據可視化展示

發布時間:2022-01-04 00:40:42 來源:億速云 閱讀:580 作者:柒染 欄目:開發技術

Python怎么爬取當網書籍數據并數據可視化展示,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、開發環境

  • Python 3.8

  • Pycharm 2021.2 專業版

二、模塊使用

csv 模塊 把爬取下來的數據保存表格里面的 內置模塊
requests >>> pip install requests 數據請求模塊
parsel >>> pip install parsel 數據解析模塊 css選擇器去提取數據

三、爬蟲代碼實現步驟

  • 導入所需模塊

  • 發送請求, 用python代碼模擬瀏覽器發送請求

  • 解析數據, 提取我們想要數據內容

  • 多頁爬取

  • 保存數據, 保存csv表格里面

1. 導入所需模塊

import requests  # 數據請求模塊 第三方模塊 需要 pip install requests
import parsel  # 數據解析模塊 第三方模塊 需要 pip install parsel
import csv  # 保存csv表格數據模塊 內置模塊
import time  # 時間模塊

2. 發送請求, 用python代碼模擬瀏覽器發送請求

headers 請求頭 作用就是python代碼偽裝成瀏覽器 對于服務器發送請求

User-Agent 用戶代理 瀏覽器的基本身份標識

標題中無效的返回字符或前導空格:User-Agent 不要留有空格

通過requests模塊里面get請求方法,對于url地址發送請求,并且攜帶上面header請求頭參數,最后用response變量接收返回數據

url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{page}'
# headers 請求頭 字典數據類型
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'
}
response = requests.get(url=url, headers=headers)

3. 解析數據, 提取我們想要數據內容

selector = parsel.Selector(response.text)  # 對于獲取到的html字符串數據進行轉換 selector 對象
# css選擇器 就是根據標簽屬性提取相應的數據
lis = selector.css('ul.bang_list li')
for li in lis:
    # .name 定位 class類名name標簽 a 標簽 attr() 屬性選擇器 取a標簽里面title屬性 get() 獲取數據
    title = li.css('.name a::attr(title)').get()  # 書名
    # 獲取標簽里面文本數據 直接text
    comment = li.css('.star a::text').get().replace('條評論', '')  # 評論
    recommend = li.css('.star .tuijian::text').get().replace('推薦', '')  # 推薦
    author = li.css('.publisher_info a:nth-child(1)::attr(title)').get()  # 作者
    publish = li.css('div:nth-child(6) a::text').get()  # 出版社
    price_n = li.css('.price .price_n::text').get()  # 售價
    price_r = li.css('.price .price_r::text').get()  # 原價
    price_s = li.css('.price .price_s::text').get()  # 折扣
    price_e = li.css('.price .price_e .price_n::text').get()  # 電子書價格
    href = li.css('.name a::attr(href)').get()  # 詳情頁
    dit = {
        '書名': title,
        '評論數': comment,
        '推薦量': recommend,
        '作者': author,
        '出版社': publish,
        '售價': price_n,
        '原價': price_r,
        '折扣': price_s,
        '電子書價格': price_e,
        '詳情頁': href,
    }
    csv_writer.writerow(dit)  # 數據保存到csv
    print(title, comment, recommend, author, publish, price_n, price_r, price_s, price_e, href, sep=' | ')

4. 多頁爬取

for page in range(1, 26):
    # 字符串格式化方法
    print(f'正在爬取第{page}頁的數據內容')
    time.sleep(1.5)
    url = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-{page}'

5. 保存數據, 保存csv表格里面

# 創建打開一個文件 進行保存
f = open('當當圖書.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '書名',
    '評論數',
    '推薦量',
    '作者',
    '出版社',
    '售價',
    '原價',
    '折扣',
    '電子書價格',
    '詳情頁',
])
csv_writer.writeheader()  # 寫入表頭

運行代碼,效果如下圖:

Python怎么爬取當網書籍數據并數據可視化展示

Python怎么爬取當網書籍數據并數據可視化展示

四、數據可視化

1.導入所需模塊

import pandas as pd
from pyecharts.charts import *
from pyecharts.globals import ThemeType#設定主題
from pyecharts.commons.utils import JsCode
import pyecharts.options as opts

2.導入數據

df = pd.read_csv('書籍信息.csv', encoding='utf-8', engine='python')
df.head()

Python怎么爬取當網書籍數據并數據可視化展示

3.可視化

書籍總體價格區間:

pie1 = (
    Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px'))
    
    .add('', datas_pair_1, radius=['35%', '60%'])
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:aegqsqibtmh%"))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="當當網書籍\n\n原價價格區間", 
            pos_left='center', 
            pos_top='center',
            title_textstyle_opts=opts.TextStyleOpts(
                color='#F0F8FF', 
                font_size=20, 
                font_weight='bold'
            ),
        )
    )
    .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
)
pie1.render_notebook()

Python怎么爬取當網書籍數據并數據可視化展示

pie1 = (
    Pie(init_opts=opts.InitOpts(theme='dark',width='1000px',height='600px'))
    
    .add('', datas_pair_2, radius=['35%', '60%'])
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:aegqsqibtmh%"))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="當當網書籍\n\n售價價格區間", 
            pos_left='center', 
            pos_top='center',
            title_textstyle_opts=opts.TextStyleOpts(
                color='#F0F8FF', 
                font_size=20, 
                font_weight='bold'
            ),
        )
    )
    .set_colors(['#EF9050', '#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
)
pie1.render_notebook()

Python怎么爬取當網書籍數據并數據可視化展示

各個出版社書籍數量柱狀圖:

bar=(
    Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark'))
    .add_xaxis(counts.index.tolist())
    .add_yaxis(
        '出版社書籍數量',
        counts.values.tolist(),
        label_opts=opts.LabelOpts(is_show=True,position='top'),
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode("""new echarts.graphic.LinearGradient(
            0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])
            """
            )
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='各個出版社書籍數量柱狀圖'),
            xaxis_opts=opts.AxisOpts(name='書籍名稱',
            type_='category',                                           
            axislabel_opts=opts.LabelOpts(rotate=90),
        ),
        yaxis_opts=opts.AxisOpts(
            name='數量',
            min_=0,
            max_=29.0,
            splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))
        ),
        tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')
    )

    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_='average',name='均值'),
                opts.MarkLineItem(type_='max',name='最大值'),
                opts.MarkLineItem(type_='min',name='最小值'),
            ]
        )
    )
)
bar.render_notebook()

書籍評論數最高Top20:

bar=(
    Bar(init_opts=opts.InitOpts(height='500px',width='1000px',theme='dark'))
    .add_xaxis(price_top.index.tolist())
    .add_yaxis(
        '書籍單價',
        price_top.values.tolist(),
        label_opts=opts.LabelOpts(is_show=True,position='top'),
        itemstyle_opts=opts.ItemStyleOpts(
            color=JsCode("""new echarts.graphic.LinearGradient(
            0, 0, 0, 1,[{offset: 0,color: 'rgb(255,99,71)'}, {offset: 1,color: 'rgb(32,178,170)'}])
            """
            )
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title='單價最高的書籍詳細柱狀圖'),
            xaxis_opts=opts.AxisOpts(name='書籍名稱',
            type_='category',                                           
            axislabel_opts=opts.LabelOpts(rotate=90),
        ),
        yaxis_opts=opts.AxisOpts(
            name='單價/元',
            min_=0,
            max_=1080.0,
            splitline_opts=opts.SplitLineOpts(is_show=True,linestyle_opts=opts.LineStyleOpts(type_='dash'))
        ),
        tooltip_opts=opts.TooltipOpts(trigger='axis',axis_pointer_type='cross')
    )

    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            data=[
                opts.MarkLineItem(type_='average',name='均值'),
                opts.MarkLineItem(type_='max',name='最大值'),
                opts.MarkLineItem(type_='min',name='最小值'),
            ]
        )
    )
)
bar.render_notebook()

Python怎么爬取當網書籍數據并數據可視化展示

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌邑市| 博湖县| 高台县| 彭水| 高碑店市| 乌兰浩特市| 泾川县| 阳山县| 通海县| 安阳市| 永新县| 涡阳县| 大埔区| 新民市| 姜堰市| 醴陵市| 新邵县| 兴业县| 翁源县| 治多县| 荣昌县| 太康县| 平阴县| 赣州市| 陈巴尔虎旗| 平南县| 彰武县| 龙胜| 邵阳县| 承德县| 霸州市| 龙川县| 闽清县| 昭平县| 滦平县| 连州市| 申扎县| 山西省| 吉安市| 琼海市| 白水县|