Python爬取噹噹網最受歡迎的 500 本書

想看好書?想知道哪些書比較多人推薦,最好的方式就是看數據,接下來用 Python 爬取噹噹網五星圖書榜 TOP500 的書籍,或許能給咱們參考參考!html

Python爬取目標

  1. 爬取噹噹網前500本受歡迎的書籍
  2. 解析書籍名稱,做者,排名,推薦程度和五星評分次數數據。
  3. 將數據存寫入到本地文件

分析網頁

噹噹網五星圖書榜這個網址中,咱們能夠看到這裏列出來了五星圖書榜:python

噹噹網五星圖書榜

經過源碼能夠看到,咱們想要的信息被包裹在<li>標籤中:正則表達式

噹噹網源碼

能夠看到咱們要的這些數據都在這:json

關鍵數據

當咱們點擊下一頁的時候,url 地址會發生改變(最後的數字會加1): 第一頁的 url 是:http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1 第二頁的 url 是:http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2 ... 咱們等會能夠經過這個變量來實現多頁加載數據。ide

Python請求網頁

咱們使用 requests 來請求噹噹網的地址,定義一個get_one_page,將會返回 HTML 源代碼。學習

def get_one_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

打印出來就是這樣,部分截圖以下:ui

源代碼

正則解析

源代碼那麼多數據,可是對咱們來講只須要籍名稱,做者,排名,推薦程度和五星評分次數數據,因此咱們要用正則表達式來過濾一下,使用 re 模塊,定義匹配規則:url

<li>.*?list_num.*?>(.*?)</div>.*?pic.*?src="(.*?)".*?/></a>.*?name"><a.*?title="(.*?)">.*?tuijian">(.*?)</span>.*?publisher_info.*?title="(.*?)".*?biaosheng.*?<span>(.*?)</span>.*?</li>

定義 parse_one_page ,返回每次匹配到的數據,解析成字典形式:spa

def parse_one_page(html):
    pattern = re.compile('<li>.*?list_num.*?>(.*?)</div>.*?pic.*?src="(.*?)".*?/></a>.*?name"><a.*?title="(.*?)">.*?tuijian">(.*?)</span>.*?publisher_info.*?title="(.*?)".*?biaosheng.*?<span>(.*?)</span>.*?</li>',re.S)
    items = re.findall(pattern,html)
    for item in items:
        yield {
            'index':item[0],
            'iamge':item[1],
            'title':item[2],
            'tuijian':item[3],
            'author':item[4],
            'times':item[5],
        }

將數據寫入文件

咱們已經拿到了每次請求的數據,而且解析匹配好了,那麼將每次獲得的數據寫入book.txt文件中去:code

def write_content_to_file(content):
    with open('book.txt','a',encoding='UTF-8') as f:
        f.write(json.dumps(content,ensure_ascii=False) + '\n')
        f.close()

多頁請求

咱們要獲取 TOP500 ,噹噹網每頁給出 20 條數據,咱們須要 25 頁的數據,一開始咱們在分析網頁的時候知道 URL 會選擇頁數改變最後的參數,因此咱們能夠用循環來請求全部的數據:

def main(page):
    url = "http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-" + str(page)
    html = get_one_page(url)
    parse_one_page(html)
    for item in parse_one_page(html):
        print(item)
        write_content_to_file(item)

if __name__ == "__main__":
    for i in range(1,26):
        main(i)

運行爬取

抓取過程

能夠看到咱們將五百條數據抓取下來了,而且在項目中多了一個book.txt文件,打開看看有沒將數據寫入:

抓取結果

ok,以上咱們就把噹噹網最受歡迎的 500 本書爬取下來了!

相關文章

  1. python3入門基礎有趣的教程
  2. Python爬蟲基礎:爬取妹子圖片並保存到本地
  3. python 爬蟲應該學習什麼知識點?
相關文章
相關標籤/搜索