爬蟲二:用BeautifulSoup爬取南方週末新聞

爬蟲流程

  1. 發起請求,通過使用HTTP庫向目標站點發起請求,即發送一個Request,請求可以包含額外的headers等信息,並等待服務器響應。
  2. 獲取響應內容如果服務器能正常響應,則會得到一個Response,Response的內容就是所要獲取的頁面內容,其中會包含:html,json,圖片,視頻等。
  3. 解析內容得到的內容可能是html數據,可以使用正則表達式、第三方解析庫如Beautifulsoup,etree等,要解析json數據可以使用json模塊,二進制數據,可以保存或者進一步的處理。
  4. 保存數據保存的方式比較多元,可以存入數據庫也可以使用文件的方式進行保存

BeautifulSoup

       簡單來說,BeautifulSoup是python的一個庫,最主要的功能是從網頁抓取數據。官方解釋如下:Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔爲用戶提供需要抓取的數據,因爲簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。Beautiful Soup已成爲和lxml、html6lib一樣出色的python解釋器,爲用戶靈活地提供不同的解析策略或強勁的速度。

       具體用法詳見中文文檔:

       中文文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh

實戰:爬取南方週末首頁新聞

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

def del_sign(s):
    '刪除各種符號和空格'
    s=s.replace(' ','').replace('\n','').replace('\t','').replace('\r','')
    return s
        
if __name__=='__main__':   
#參數設置     
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}#請求頭,模擬瀏覽器進行請求
    url='http://www.infzm.com/news.shtml'#要爬蟲的網址

#開始爬取
    response=requests.get(url,headers=headers)#發送請求並得到響應
    title_list,content_list=[],[]#存儲文章標題和概要容器
    if response.status_code==200:
        response.encoding=response.apparent_encoding#字符編碼設置爲網頁本來所屬編碼
        html=response.text#獲取網頁代碼
        html_bs = bs(html,'lxml')#將網頁文本代碼轉爲bs對象
        article_bs=html_bs.find_all('article',attrs={'class','news_left_two_next'})#獲取文章標籤內容
        for i,x in enumerate(article_bs):
            print('第{}條新聞提取中'.format(i+1))
            title_list.append(del_sign(x.find('h3').text))#文章標題
            content_list.append(del_sign(x.find('p',attrs={'class':'summary'}).text))#文章概要   
        
        #存儲數據
        data=pd.DataFrame(zip(title_list,content_list),columns=['title','content'])#轉爲dataframe
        data.to_csv('./南方週末新聞.csv',encoding='utf-8-sig')#存爲csv
    else:
        print('請求失敗!')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章