1. 程式人生 > >第三隻爬蟲-----豆瓣影評

第三隻爬蟲-----豆瓣影評

最近的原則就是把以前爬蟲爬到一半出現各種bug,導致爬不下去的網站全部清理掉,第三隻豆瓣爬蟲來了,主要爬了豆瓣的熱門影評內容,部分程式碼寫的不是特別的簡潔,現階段主要是為了掌握各種方法,後期再進一步完善,希望有看到的小夥伴能夠幫忙指正。

目標:

爬取豆瓣的熱門影評(https://movie.douban.com/review/best/)主要爬取:影評標題、影片詳情連結、影評人、影片名、評分、影評以及影評時間

遇到的困難:

爬取影評詳情連結時用到的方法,層層獲取到內容,其次是影評的內容要連結到影片詳情的連結,也就是跳轉到另一個頁面去爬取,最重要的一點我還沒有解決,在爬取部分影評的時候,遇到的需要登入才能訪問,需要模擬登陸,這一點還沒攻破,假期結束主要學習動態頁面的爬蟲和模擬登陸,小白成長中,加油!

程式碼:

import urllib
from urllib.request import urlopen
from bs4 import BeautifulSoup
import os
import csv
import re
import time
import urllib.error
#定義豆瓣影評爬蟲類
class DBYP():
    def __init__(self):
        self.baseUrl=baseUrl
        self.pageNum=0
    #得到指定頁面全部內容
    def askUrl(self,url):
        request=urllib.request.Request(url)
        try:
            response=urllib.request.urlopen(request)
            html=response.read().decode('utf-8')
            return html
        except urllib.error.URLError as e:
            if hasattr(e,'reason'):
                print(u'連線影片詳情頁面失敗,原因:',e.reason)
                return  None
    #傳入某一頁索引,獲取頁面程式碼
    def getPage(self,pageNum):
        try:
            url=baseUrl+str(pageNum)
            request=urllib.request.Request(url)
            response=urllib.request.urlopen(request)
            html=response.read().decode('utf-8')
            # print(html)
            return html
        except urllib.error.URLError as e:
            if hasattr(e,'reason'):
                print(u'連線豆瓣影評失敗,原因:',e.reason)
                return  None
    #使用BeautifulSoup方法爬取頁面所要獲取的內容
    def getPageInfo(self,pageNum,html):
        bs=BeautifulSoup(html,'lxml')
        content_field=bs.select('header.main-hd')
        # print(content_field)
        item=[]
        for each in content_field:
            title=each.select('a.title-link')[0]
            href = each.find_all('h3', {'class': "title"})[0].find_all('a')[0]#一層一層的獲取到內容,最後href[href]提取出連結中的內容
            url = href['href']  # 影片詳情連結
            # print(url)
            author = each.select('a > span')[0]
            subject_title = each.select('a.subject-title')[0]
            rate = each.select('span.main-title-hide')[0]
            pattern =self.askUrl(url)  # 獲取影片詳情的html
            html = BeautifulSoup(pattern, 'lxml')  # 解析HTML檔案
            content = html.select('div.review-content')[0]
            print(content.text)
            # desc = re.sub(remove '', str(content))  # 去掉標籤
            date = each.select('span.main-meta')[0]
            time.sleep(2)
            item.append((title.text, url, author.text, subject_title.text, rate.text, content.text, date.text))
        # print(item)
        return item

    #將檔案儲存為csv格式
    def write_Data(self,contents):
        csvFile=open('film_review.csv','a',newline='',encoding='utf-8')
        writer=csv.writer(csvFile)
        writer.writerow(('標題','影評詳情連結','影評人','影片名','評分/5','影評','日期'))
        for item in contents:
            writer.writerow(item)
        csvFile.close()
    #刪除已有檔案
    def deleteOldTxt(self):
        filename='film_review.csv'
        if os.path.exists(filename):
            os.remove(filename)
            print('發現舊名單,已刪除')
    #設定頁數,存取資料
    def start(self):
        print('正在讀取熱門影評:')
        IndexPage=self.getPage(0)
        try:
            for i in range(0,100,20):
                print('正在讀取第'+str(i)+'頁的內容:')
                page=self.getPage(i)
                html=spider.getPage(i)
                contents=self.getPageInfo(page,html)
                print(contents)
                self.write_Data(contents)
                time.sleep(2)
        except IOError as e:
            print('寫入異常,原因:'+ e.message)
        finally:
            print('寫入任務完成')
baseUrl='https://movie.douban.com/review/best/?start='
spider=DBYP()
spider.deleteOldTxt()
spider.start()

貼出來的程式碼,現在用是沒有問題的,但是涉及到有的網頁需要登入才能爬取,所以後期對於模擬登陸這一part需要進一步完善

相關推薦

爬蟲-----豆瓣影評

最近的原則就是把以前爬蟲爬到一半出現各種bug,導致爬不下去的網站全部清理掉,第三隻豆瓣爬蟲來了,主要爬了豆瓣的熱門影評內容,部分程式碼寫的不是特別的簡潔,現階段主要是為了掌握各種方法,後期再進一步完善,希望有看到的小夥伴能夠幫忙指正。 目標: 爬取豆瓣的熱門影評(http

盲人畫家:人真的有

盲人畫家:人真的有第三隻眼   柳鯤鵬 2008-8-8   關鍵字:盲人畫家 第三隻眼 意識眼 簡介:土耳其有一位畫家阿馬甘,不僅可以正確表達物體的立體形象,而且顏色正確。有科學家認為,他有第三隻眼,即意識眼。       正常人有兩隻眼,接收光線來觀察這個世界

篇:爬蟲框架 - Scrapy

工程 講解 爬取 turn 本體 爬蟲框架 sel 傳遞 使用 前言 Python提供了一個比較實用的爬蟲框架 - Scrapy。在這個框架下只要定制好指定的幾個模塊,就能實現一個爬蟲。 本文將講解Scrapy框架的基本體系結構,以及使用這

百二十四節,web爬蟲,scrapy模塊介紹與使用

通訊 通用 系列 python安裝 ide 調度器 功能 自動 優先 第三百二十四節,web爬蟲,scrapy模塊介紹與使用 Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 其可以應用在數據挖掘,信息處理或存儲歷史數據等一系列的程序中。其最初是為了頁面

十節,web爬蟲講解2—urllib庫爬蟲—實戰爬取搜狗微信公眾號

文章 odin data 模塊 webapi 頭信息 hone 微信 android 第三百三十節,web爬蟲講解2—urllib庫爬蟲—實戰爬取搜狗微信公眾號 封裝模塊 #!/usr/bin/env python # -*- coding: utf-8 -*- impo

十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄—獲取Scrapy框架Cookies

pid 設置 ade form 需要 span coo decode firefox 第三百三十三節,web爬蟲講解2—Scrapy框架爬蟲—Scrapy模擬瀏覽器登錄 模擬瀏覽器登錄 start_requests()方法,可以返回一個請求給爬蟲的起始網站,這個返回的請求相

十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—深度優先與廣度優先原理

.com nbsp 網站 color -1 廣度 spa .cn png 第三百三十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—深度優先與廣度優先原理 網站樹形結構 深度優先 是從左到右深度進行爬取的,以深度為準則從左到右的執行 第三百三十

百五十三節,Python分布式爬蟲打造搜索引擎Scrapy精講—scrapy的暫停與重啟

ctrl+ 裏的 dir 其中 重啟 requests 引擎 image .cn 第三百五十三節,Python分布式爬蟲打造搜索引擎Scrapy精講—scrapy的暫停與重啟 scrapy的每一個爬蟲,暫停時可以記錄暫停狀態以及爬取了哪些url,重啟時可以從暫停狀態開始

百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection)

ack 高效 所有 crawl resp spider 方法 啟動 定義 第三百五十四節,Python分布式爬蟲打造搜索引擎Scrapy精講—數據收集(Stats Collection) Scrapy提供了方便的收集數據的機制。數據以key/value方式存儲,值大多是

百五十五節,Python分布式爬蟲打造搜索引擎Scrapy精講—scrapy信號詳解

第一個 如果 -c stopped lin 支持 idle 資源 spider 第三百五十五節,Python分布式爬蟲打造搜索引擎Scrapy精講—scrapy信號詳解 信號一般使用信號分發器dispatcher.connect(),來設置信號,和信號觸發函數,當捕獲到信號

百五十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—將bloomfilter(布隆過濾器)集成到scrapy-redis中

分布式爬蟲 times 操作 加載 ger 目錄 需要 ini space 第三百五十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—將bloomfilter(布隆過濾器)集成到scrapy-redis中,判斷URL是否重復 布隆過濾器(Bloom Filte

百六十一節,Python分布式爬蟲打造搜索引擎Scrapy精講—倒排索引

索引原理 文章 根據 file 索引 -i span 需要 style 第三百六十一節,Python分布式爬蟲打造搜索引擎Scrapy精講—倒排索引 倒排索引 倒排索引源於實際應用中需要根據屬性的值來查找記錄。這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的

百六十五節,Python分布式爬蟲打造搜索引擎Scrapy精講—elasticsearch(搜索引擎)的查詢

搜索引擎 ack 復合 分布式 內置 分布 在一起 一起 分類 第三百六十五節,Python分布式爬蟲打造搜索引擎Scrapy精講—elasticsearch(搜索引擎)的查詢 elasticsearch(搜索引擎)的查詢 elasticsearch是功能非常強大的搜索

百六十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—elasticsearch(搜索引擎)用Django實現搜索的自動補全功能

技術 django 分布 全功能 -s col ron 搜索 創建 第三百六十八節,Python分布式爬蟲打造搜索引擎Scrapy精講—用Django實現搜索的自動補全功能 elasticsearch(搜索引擎)提供了自動補全接口 官方說明:https://www

Python周之文件的讀寫以及簡單的爬蟲介紹

以及 under url error: except __name__ quest for div 文件的讀寫   讀 import time def main(): """ 文件的讀寫,註意open的用法以及,文件地址的輸入。 :retur

爬蟲課:互聯網中網頁的解析

iso 來看 指向 應該 pri tro conn 路徑 獲取 基本步驟 這節課們們的目的就是使用Requests模塊+BeautifulSoup模塊爬取網站上的信息 首先爬取一個網站主要分兩步 1、第一步我們要了解服務器與本地交換機制,選擇正確的辦法我們才能獲取正確的信息

篇 - 爬取豆瓣電影網

zip def str 一個 eva 電影 pycha 系統 瀏覽器 環境:python 3.6 pycharm 模塊:requests,json 1 import requests 2 import json 3 4 #請求頭 5 headers = {

Python:黑板課爬蟲闖關

註冊 之前 ear crawler htm csrf href else 技術分享 第三關開始才算是進入正題了。 輸入網址 http://www.heibanke.com/lesson/crawler_ex02/,直接跳轉到了 http://www.heibanke.com

我的一個python爬蟲:爬取豆瓣top250前100部電影

爬取豆瓣top250前100部電影   1 # -*-coding=UTF-8 -*- 2 3 import requests 4 from bs4 import BeautifulSoup 5 6 headers = {'User-Agent':'Moz

豆瓣影評爬蟲

豆瓣影評爬蟲 今天要爬取https://movie.douban.com/review/best/?start=0該網址的30條最受歡迎影評。 我們可以看到影評比較長,需要展開才能完整顯示。但是在網頁原始碼中是沒有顯示完整影評的。所以我們考慮到這部分應該是非同步載入的方式顯示。所以開啟