「Python爬蟲實戰系列(4)」——爬取百度新聞信息

2020-12-24 哈希大數據

歡迎大家關注公眾號【哈希大數據】

前面我們已經介紹了scrapy的安裝、入門教程,以及MongoDB的安裝與配置,本篇將分享如何利用scrapy爬取百度新聞信息,並將爬取到的數據存儲到MongoDB資料庫中。

抓取目標

通過給定關鍵字,爬取百度新聞中搜索到的所有有關新聞信息,新聞標題、新聞連結、新聞來源。

技術路線

利用scrapy框架實現此次爬取,利用parse函數獲得需要抓取的信息,通過items和piplinepipelines的設置實現數據存儲到MongoDB資料庫中,通過middleware設置user_agent降低網站對爬蟲的限制,使得爬取速度可在一個較高的水平上。

目標站點分析

Python爬蟲實戰系列(3)中已經介紹了如何利用chrome瀏覽器獲取對應標籤的XPATH或CSS路徑,本次獲取新聞信息,採用的解析方式是CSS。

程序的結構設計

步驟1:打開命令行窗口,進入想新建項目的目錄

步驟2:在命令行中輸入:scrapy startproject xxxx(項目名稱) 新建一個項目

步驟3:進入項目文件,在命令行中輸入:scrapy genspider <爬蟲名稱> <爬取網址>新建爬蟲

步驟3:更改items.py文件,設置item

步驟4:編寫爬取代碼

步驟5:更改pipelines和middlewares

步驟6:啟動爬蟲,打開命令行進入到項目目錄下,輸入:scrapy crawl <爬蟲名稱>

items.py代碼如下:

# -*- coding: utf-8 -*-# Define here the models for your scraped items## See documentation in:# http://doc.scrapy.org/en/latest/topics/items.htmlfrom scrapy import Item, Fieldclass mmwzItem(Item):# define the fields for your item here like: # name = Field() article_title = Field() article_url = Field() article_catchroad = Field() article_source = Field()

本例子的爬蟲名稱為:xinwen,爬蟲文件xinwen.py的代碼為:

# -*- coding: utf-8 -*-from urllib.parse import urlencodeimport refrom scrapy import Spider, Requestfrom scrapy_mmwz.items import mmwzItemclass XinwenSpider(Spider):name = "xinwen" keyword = '比特幣' page = 0 #查詢信息 data = { 'word': keyword, 'pn': page, 'cl': '2', 'ct': '1', 'tn': 'news', 'rn': '20', 'ie': 'utf - 8', } # 生成URL的參數部分 params = urlencode(data) base = 'http://news.baidu.com/ns?' url = base + params allowed_domains = ["news.baidu.com"] start_urls = [url] def parse(self, response): item = mmwzItem() if response.status == 200: news_lists = response.css('#wrapper_wrapper #content_left div.result') page_number = response.css('p#page strong span.pc::text').extract_first() # print(news_lists) print('page_number:', page_number) if news_lists: for news in news_lists: # news_lists是一個生成器,在調用函數是可以用for循環依次獲取結果 lists = { 'article_url': news.css('.c-title a::attr(href)').extract_first(), 'article_title': news.css('.c-title a::text').extract_first(), 'article_catchroad': 'baidu', 'article_source': re.search(re.compile('(.*?)\\xa0', re.S), news.css('p.c-author::text').extract_first()).group(1) } for field in item.fields: if field in lists.keys(): item[field] = lists.get(field) # 它相當於return只不過一次返回一個 yield item print(response.css('p#page a:last-child::text').extract_first()) if response.css('p#page a:last-child::text').extract_first() == '下一頁>': # 獲取下一頁鏈接 next_page = 'http://news.baidu.com' + response.css('p#page a:last-child::attr(href)').extract_first() # 實現循環獲取下一頁內容 yield Request(next_page, callback=self.parse)

通過pipelines設置,將爬取到的數據成功保存到MongoDB資料庫中,設置詳細代碼如下:

# -*- coding: utf-8 -*-# Define your item pipelines here## Don't forget to add your pipeline to the ITEM_PIPELINES setting# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimport pymongoclass MongoPipeline(object):collection_name = 'xinwen' def __init__(self, mongo_uri, mongo_db): self.mongo_uri = mongo_uri self.mongo_db = mongo_db @classmethod def from_crawler(cls, crawler): return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE', 'items') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() # def process_item(self, item, spider): # self.db['user'].update({'url_token': item['url_token']}, {'$set': item}, True) # # return item def process_item(self, item, spider): self.db[self.collection_name].insert(dict(item)) return item

這裡需要注意兩點,第一首先安裝pymongo包,第二在settings.py文件做如下設置:

MONGO_URI = 'localhost'MONGO_DATABASE = 'xinwen'

settings.py文件中還有一個需要特別注意的是:

# Obey robots.txt rulesROBOTSTXT_OBEY = False

非常多的網站都有robots協議,不允許爬取本網站信息,如果這個參數設置為True,非常多的網站都不能爬取了。

完整項目代碼請參考我的GitHub:https://github.com/kxylxx/scrapy_testproject

為了方便查看爬取到的信息,這裡給大家推薦一個MongoDB可視化軟體Robo 3T,詳細安裝使用教程請參考:https://www.cnblogs.com/dacongge/p/7346037.html ,感謝大蔥哥的分享。

結果展示及小結

獲取到的數據如下圖所示

小結:

通過本次實戰希望大家對scrapy框架有更深刻的認識,希望能夠根據該案例設計一個基於scrapy框架的爬蟲程序,以熟悉整個爬取流程。希望大家能夠自己敲寫代碼,在敲代碼的過程中發現問題解決問題。

相關焦點

  • python爬蟲系列教程,用python爬取全國範圍內的KFC店地址
    下面羽憶教程教你會python爬取全國範圍內的KFC店地址,這是一篇python爬蟲系列的教程,簡單又能讓人填飽肚子。python爬蟲介紹python發展至今,python爬蟲已經成為了一種職業,因為其可以幫助企業快速得到網絡上的最新信息,但是為什麼很多寫python爬蟲的程式設計師會面臨牢獄之災呢?
  • Python開發簡單爬蟲【學習資料總結】
    ;另一方面,會將新的URL補充進URL管理器,若有URL管理器中含有新的URL,則重複上述步驟,直到爬取完所有的URL 6、最後,調度器會調動應用的方法,將價值數據輸出到需要的格式。
  • 「Python爬蟲實戰系列(1)」——解析365淘房網
    咱們可以寫個小爬蟲,爬取過年前後的租房信息,分析對比前後數據便可得出結論,同時我們還可以利用爬取到的數據分析各個小區或者地鐵站附近的租房信息,看看哪些地方相對房租較低,有沒有漏網之魚等等。接下來咱們就看看如何利用Requests+正則表達式爬取365淘房網的租房信息。
  • python爬蟲之selenium抓取淘寶商品信息
    簡介本節採用python爬蟲相關技術獲取淘寶商品信息。採用的技術有selenium、pyquery及urllib.parse等。selenium有優點也有缺點,模擬用戶實際操作,必須等待網頁的必要信息加載完畢,如靜態頁面、css等,所以效率比較低,所以具體看用戶如何取捨,如果注重效率,可以用requests模塊進行分析爬取,後續有空也會採用requests、urllib庫進行爬蟲訓練,使用正則表達式分析爬取到的內容。
  • python爬蟲入門實戰!爬取博客文章標題和連結!
    最近有小夥伴和我留言想學python爬蟲,那麼就搞起來吧。準備階段爬蟲有什麼用呢?舉個最簡單的小例子,你需要《戰狼2》的所有豆瓣影評。最先想的做法可能是打開瀏覽器,進入該網站,找到評論,一個一個複製到文本中,保存,翻頁,接著複製,直到翻到最後一頁。
  • python為什麼叫爬蟲?為啥那麼多人通過python兼職都能掙不少錢?
    Python能做什麼之前有很多文章介紹python能做什麼。今天介紹python爬蟲的學習。網絡爬蟲 網絡爬蟲,也叫網絡蜘蛛(Web Spider)。爬蟲是根據網頁地址(URL)爬取網頁上的內容,這裡說的網頁地址(URL)就是我們在瀏覽器中輸入的網站連結。例如:https://www.baidu.com/,這就是一個URL。
  • 用Python爬蟲爬取去哪兒4500個熱門景點,看看國慶不能去哪兒
    所以這次的目標呢,是爬去哪兒網景點頁面,並得到景點的信息,大家可以先思考下大概需要幾步。1.百度的地圖API和echarts這次正好爬的是數據,我決定用數據的好基友——圖表來輸出我爬取的數據,也就是說我要用爬取的景點銷量以及景點的具體位置來生成一些可視化數據。
  • 「Python爬蟲實戰系列(2)」——解析智聯招聘
    咱們可以寫個小爬蟲,爬取該地的招聘信息,分析在該地自己求職崗位的薪資情況,已經相關公司的聚集地等,之前我們已經發布過一篇爬取找365租房網的實戰案例,結合這篇案例,就可以解決搜集租房和招聘信息的問題啦。接下來咱們就看看如何利用Requests+Beautiful Soup爬取智聯招聘的招聘信息。
  • 資料|精通 Python 網絡爬蟲:核心技術、框架與項目實戰
    from=leiphonecolumn_res0731為什麼寫這本書 · · · · · ·網絡爬蟲其實很早就出現了,最開始網絡爬蟲主要應用在各種搜尋引擎中。在搜尋引擎中,主要使用通用網絡爬蟲對網頁進行爬取及存儲。
  • 重慶科技學院首屆「曙光瑞翼杯」Python爬蟲競賽
    隨著網絡的迅速發展,全球資訊網成為大量信息的載體,如何有效地提取並利用這些信息成為一個巨大的挑戰。但是在大數據浪潮中,最值錢的就是數據,企業為了獲得數據,處理數據,理解數據花費了巨大代價,網絡爬蟲則是獲取簡單數據的一種最有效的方式。
  • 雲立方網科普:常用高效的Python爬蟲框架有哪些?
    Python是現在非常流行的程式語言,而爬蟲則是Python語言中最典型的應用,下面是總結的高效Python爬蟲框架,大家看看是否都用過呢。
  • Python網絡爬蟲
    而網絡爬蟲技術,則是大數據分析領域的第一個環節。(二):能從網絡上爬取什麼數據?所有在網頁能見到的數據都可以通爬蟲程序保存下來。(三):python爬蟲的流程獲取網頁——解析網頁(提取數據)——存儲數據1:獲取網頁:給一個網址發送請求,該網址會返回整個網頁的數據。
  • 聊聊學python轉行、具體學習方法、自學python用於辦公、寫爬蟲等...
    一:關於轉行學python的情況之前有朋友看了我一篇關於用python爬蟲採集信息分析網際網路職位的文章,加我,然後問我說:學python數據分析能恰飯不?」然後我就問他說:「你說的恰飯是什麼意思呢?是找工作?還是自己做點東西?或者是接私活?」
  • 最簡單的Python爬蟲,僅3步11行代碼爬取豆瓣電影排名
    提到網絡爬蟲,很多人望而卻步,覺得非常難,其實非如此,哪怕沒有爬蟲基礎,也可以寫出一個簡單的爬蟲。萬丈高樓平地起,今天分享一個最簡單的爬蟲,目的是通過案例,使大家對爬蟲有一個直觀的認識。第一步:確定目標爬蟲的第一步是要確定爬取的目標,沒有目標就沒有方向,更無從寫代碼。
  • 春運了,Python爬特價機票,爬人臉識別、爬微信……監管空白?
    愛濟南App的研發者之一、舜網研發部主任李濱告訴記者,「爬蟲」最早應用在搜尋引擎領域比如谷歌、百度、搜狗等,因為每天需要抓取數百億的網頁,所以它們需要藉助龐大的「爬蟲」集群來實現搜索功能。這種信息採集過程很像爬蟲或蜘蛛在網絡上漫遊,因此得名。
  • 用python分析上海二手房數據,用幾十行代碼爬取大規模數據!
    spider_1('http://esf.xian.fang.com/')4、循環翻頁爬取二手房信息考慮到每頁只顯示30條,總共100頁,寫一個循環調用的語句,把100頁的內容全部爬下來# 循環,把第2-100頁全部爬下來page = 1while
  • 不知道Python爬蟲?這篇文章丟給他(內含框架結構)
    前言爬蟲即網絡爬蟲,英文是Web Spider。翻譯過來就是網絡上爬行的蜘蛛,如果把網際網路看作一張大網,那麼爬蟲就是在大網上爬來爬去的蜘蛛,碰到想要的食物,就把他抓取出來。我們在瀏覽器中輸入一個網址,敲擊回車,看到網站的頁面信息。這就是瀏覽器請求了網站的伺服器,獲取到網絡資源。
  • Python爬蟲學到什麼程度就可以去找工作了?
    有朋友在群裡和大家討論,問的最多的問題就是,python 爬蟲學到什麼程度可以去找工作了,關於這點,和大家分享下我的理解。去招聘網上看看需求都有哪些,直接做個拉勾網爬蟲(有需要的私信)出結果了:仔細看看,我們可以得出以下幾點:1、 python 不是唯一可以做爬蟲的,很多語言都可以,
  • Python網絡爬蟲(第二篇)
    在網絡爬蟲中,靜態網頁的數據都呈現在HTML代碼中,所以比較容易獲取。動態網頁是使用AJAX動態加載網頁數據不一定出現在HTML代碼中,這就相比於靜態網頁,爬取動態網頁的數據上升了一個難度。二、為什麼爬取靜態網頁數據比較簡單?
  • Python中爬蟲框架或模塊的區別
    Python中爬蟲框架或模塊的區別 (1)爬蟲框架或模塊 Python自帶爬蟲模塊:urllib、urllib2 ; 第三方爬蟲模塊:requests,aiohttp;