1. 程式人生 > >爬蟲之爬取豆瓣熱門圖書的名字

爬蟲之爬取豆瓣熱門圖書的名字

描述 調用 過濾 content tex pl2 main from code

import requests  #requests模塊用於HTTP請求
import codecs    #codecs模塊用於文件操作
from bs4 import BeautifulSoup  #beautifulSoup庫用於對html代碼進行解析

#要爬取的地址
URL="https://book.douban.com/top250"

#user-agent,模仿瀏覽器,防止被目標網站反爬
HEADERS = {
    "User-Agent":"Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_2 ) AppleWebKit/537.36(KHTML, like Gecko) Chrome/60.0.3202.62 Safari/537.36
" } #定義請求特定URL頁面的方法,用於多次請求 def download_page(url): #請求頁面,獲取要爬取的頁面內容 data = requests.get(url,headers=HEADERS).content return data #從請求回來的特定頁面中篩選出來我們需要的特定的信息 def parse_html(html): #使用bs解析獲取的頁面,測試是否可以用print(soup.pretiffy())打印查看獲取的頁面 soup = BeautifulSoup(html,html.parser) #print(html)
#print(soup.prettify()) #exit() #利用BeautifulSoup獲取要爬取的頁面信息 #查找頁面中class為indent的div(首先要從頁面分析出來哪個條件可以唯一定位書籍內容的div) book_list_soup = soup.find(div,attrs={class:indent}) # print(book_list_soup) # exit() #定義一個數組用來存儲書名信息 book_name_list=[] #遍歷書籍div內的信息,找到每個table元素來進行後續操作
for book_li in book_list_soup.find_all(table): # print(book_li) # exit() #對每個table元素應用以下篩選邏輯 #找到圖書描述的div detail = book_li.find(div,attrs={class:pl2}) #找到圖書的名字所在標簽,利用字符串操作得到純粹的書名 book_name=detail.find(a).getText().replace(\t,‘‘).replace(\n,‘‘).replace( ,‘‘) #把書名添加到數組中 book_name_list.append(book_name) #添加到list中 # print(book_name_list) # exit() #遍歷完當前頁面的書籍後,找到下一頁的鏈接繼續上面的流程來爬取書名 next_page = soup.find(span,attrs={class:next}).find(a) #如果有下一頁,則拼接下一頁的url,繼續爬取,同時返回圖書名稱的list if next_page: return book_name_list,next_page[href] #如果沒有則爬蟲結束,同時返回圖書名稱的list return book_name_list,None def main(): #局部變量url,用於記錄每次爬取的頁面的URL url=URL #循環變量,用於控制臺顯示頁數 i = 1 #打開文件,使用utf-8編碼 with codecs.open(books.txt,wb,encoding=utf-8) as fp: while url: print(正在獲取頁數: +str(i)) i=i+1 #調用獲取頁面的函數 html = download_page(url) #調用過濾頁面信息以得到書名的函數 books,url=parse_html(html) #將獲取的書名寫入文件,利用format函數格式化書名列表 fp.write(u{books}.format(books=\r\n.join(books))) #當頁面直接運行時,執行main函數 if __name__==__main__: main()

爬蟲之爬取豆瓣熱門圖書的名字