GitHub 代碼地址https://github.com/injetlee/Python/blob/master/qiubai_crawer.pyhtml
微信公衆號:【智能製造社區】,歡迎關注。python
爬蟲也稱網頁蜘蛛,主要用於抓取網頁上的特定信息。這在咱們須要獲取一些信息時很是有用,好比咱們能夠批量到美圖網站下載圖片,批量下載段子。省去手工操做的大量時間。爬蟲程序通常是經過模擬瀏覽器對相應URL發出請求,獲取數據,並經過正則等手段匹配出頁面中咱們所需的數據。git
在學習爬蟲以前,最好到 w3school 去了解一下 HTML 標籤的概念以及基本的 CSS 的概念。這會讓咱們更容易的理解如何獲取頁面中某個內容。github
Requests 是學習爬蟲的一大利器。是一個優雅簡單的 HTTP庫。官網介紹以下:正則表達式
Requests: HTTP for Humans
專門爲人類使用的 HTTP 庫。使用起來很是簡單明瞭。
咱們平時瀏覽網頁的步驟是輸入網址,打開。在 Requests 中是以下這樣的,咱們能夠在 Python 交互式解釋器中輸入如下代碼:瀏覽器
import requests r = requests.get('https://www.qiushibaike.com/text/') # 打開網址,通常咱們會設置 請求頭,來更逼真的模擬瀏覽器,下文有介紹 r.text
我門看到下面一堆的代碼,其實就是網頁的源代碼(也能夠在瀏覽器上右鍵查看頁面源代碼)。經過這幾行代碼咱們就拿到了頁面的全部信息,剩下的就是從頁面中找到咱們所須要的信息。微信
拿到網頁信息後,咱們要解析頁面,一般來講咱們有如下幾種方式來解析頁面,獲取咱們所需的信息。學習
正則表達式網站
Lxmlui
Beautiful Soup
本文做爲入門教程,就從 Beautiful Soup 入手,來學習一下匹配頁面所需元素的方法。
假若有如下 HTML 內容 example.html
<html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Page Title</title> </head> <body> <div class='main-page'> <ul class='menu-list'> <li>首頁</li> <li>新聞</li> <li>影視</li> </ul> </div> </body> </html>
咱們經過 Beautiful Soup 來解析這個 html. 首先咱們pip install beautifulsoup4
安裝這個庫,並看一下簡單使用。
>>>from bs4 import BeautifulSoup >>>soup = BeautifulSoup('example.html', 'html.parser') #加載咱們的html文件 >>>soup.find('div') # 找到 div 標籤 '<div class="main-page"> <ul class="menu-list"> <li>首頁</li> <li>新聞</li> <li>影視</li> </ul> </div>' >>>soup.find_all('li') # 找到全部 li 標籤 '[<li>首頁</li>, <li>新聞</li>, <li>影視</li>]' >>>for i in li: print(i.text) #獲取每一個 li 標籤的內容 ' 首頁 新聞 影視 '
詳細的操做能夠去看一下文檔,文檔很是詳細,例子也不少,簡單明瞭。
咱們先爬取純文本的內容 https://www.qiushibaike.com/t... 爬取這個連接下的內容。咱們把頁面結構截圖以下,咱們要獲取的信息,我用紅色的方框進行了標註。
圖一:
圖二:
import requests from bs4 import BeautifulSoup def download_page(url): headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"} r = requests.get(url, headers=headers) # 增長headers, 模擬瀏覽器 return r.text def get_content(html, page): output = """第{}頁 做者:{} 性別:{} 年齡:{} 點贊:{} 評論:{}\n{}\n------------\n""" # 最終輸出格式 soup = BeautifulSoup(html, 'html.parser') con = soup.find(id='content-left') # 如圖一紅色方框 con_list = con.find_all('div', class_="article") # 找到文章列表 for i in con_list: author = i.find('h2').string # 獲取做者名字 content = i.find('div', class_='content').find('span').get_text() # 獲取內容 stats = i.find('div', class_='stats') vote = stats.find('span', class_='stats-vote').find('i', class_='number').string comment = stats.find('span', class_='stats-comments').find('i', class_='number').string author_info = i.find('div', class_='articleGender') # 獲取做者 年齡,性別 if author_info is not None: # 非匿名用戶 class_list = author_info['class'] if "womenIcon" in class_list: gender = '女' elif "manIcon" in class_list: gender = '男' else: gender = '' age = author_info.string # 獲取年齡 else: # 匿名用戶 gender = '' age = '' save_txt(output.format(page, author, gender, age, vote, comment, content)) def save_txt(*args): for i in args: with open('qiubai.txt', 'a', encoding='utf-8') as f: f.write(i) def main(): # 咱們點擊下面連接,在頁面下方能夠看到共有13頁,能夠構造以下 url, # 固然咱們最好是用 Beautiful Soup找到頁面底部有多少頁。 for i in range(1, 14): url = 'https://qiushibaike.com/text/page/{}'.format(i) html = download_page(url) get_content(html, i) if __name__ == '__main__': main()
運行代碼後,咱們會獲得 'qiubai.txt'文件,打開後以下所示