想看好書?想知道哪些書比較多人推薦,最好的方式就是看數據,接下來用 Python 爬取噹噹網五星圖書榜 TOP500 的書籍,或許能給咱們參考參考!html
- 爬取噹噹網前500本受歡迎的書籍
- 解析書籍名稱,做者,排名,推薦程度和五星評分次數數據。
- 將數據存寫入到本地文件
在噹噹網五星圖書榜這個網址中,咱們能夠看到這裏列出來了五星圖書榜: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
咱們使用 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 本書爬取下來了!