【爬蟲】爬取貓眼電影top100
用正則表示式爬取
儲存到資料庫#!/usr/bin/python # -*- coding: utf-8 -*- import json # 快速匯入此模組:滑鼠先點到要匯入的函式處,再Alt + Enter進行選擇 from multiprocessing.pool import Pool #引入程序池 import requests import re import csv from requests.exceptions import RequestException #引入異常 ## 正確儲存,無丟失 # 請求一個頁面返回響應內容 #以《霸王別姬》為列,右擊—檢視元素—會顯示一個網頁資訊 def get_one_page(url,offset): try: response=requests.get(url=url,params={"offset":offset}) if response.status_code==200: #由狀態碼判斷返回結果,200表示請求成功,300,500表出錯 return response.text #返回網頁內容 else:return None except RequestException as e: return None # 解析一個頁面 def parse_one_page(html): pattern = ('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a' + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>' + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>') #寫個正則,匹配所有結果。這裡由上面的網頁相應內容寫<dd>開頭,.*?匹配任意字元穿 board-index匹配識別符號,類名, # \d 表數字即排名,'+'表示匹配至少一個可多個數字,</i>右邊結束符 #“?”,問號表示 非貪婪匹配,就是一旦匹配到就不在繼續往後面嘗試。 #而\(和\)分別表示匹配一個“(”和“)” # re.S匹配多行 regex = re.compile(pattern,re.S) #一個方法,通過一個正則表示式字串編譯生成一個正則表示式物件,re.S 匹配任意字元 items = regex.findall(html) #以列表形式返回全部能匹配的子串. eg: re.findall(pattern, string[, flags]) for item in items: #將結果以字典形式返回,鍵值對 yield{ #把這個方法變成一個生成器 'index':item[0], 'image':item[1], 'title':item[2], 'actor':item[3].strip()[3:], #用strip()去掉換行符,不想要 主演: 這三個字就用[3:]組成一個切片,name就可以將前三個字串去掉 'time':get_release_time(item[4].strip()[5:]), #去掉前五個字元 'area':get_release_area(item[4].strip()[5:]), 'score':item[5]+item[6] #將評分整數部分和小數部分結合起來 } ''' #儲存到txt,會發現中文漢字變成了unic的編碼,加上encoding='utf-8',ensure_ascii=False,則漢字可正常輸出 def write_to_file(content): with open('result.txt','a',encoding='utf-8') as f: # 引數 a ,表示直接往後追加 f.write(json.dumps(content,ensure_ascii=False) +'\n') #content是一個字典的形式,用json.dumps 把它轉換為字串,再加個換行符 f.close() #json.dumps :dict 轉換為 str #json.loads: str 轉換為 dict ''' '''''' # 獲取上映時間 <p class="releasetime">上映時間:1993-01-01(中國香港)</p> def get_release_time(data): pattern = '^(.*?)(\(|$)' regex = re.compile(pattern) w = regex.search(data) return w.group(1) # group(1)指的是第一個括號裡的東西 # 獲取上映地區 def get_release_area(data): pattern = '.*\((.*)\)' #而\(和\)分別表示匹配一個 '(' 和 ')' regex = re.compile(pattern) w = regex.search(data) if w is None: return'未知' return w.group(1) # 獲取封面大圖,不需要 # def get_large_thumb(url): # pattern = '(.*?)@.*?' # regex = re.compile(pattern) # w = regex.search(url) # return w.group(1) # 儲存資料 def store_data(item): with open('movie.csv','a',newline='',encoding='utf-8') as data_csv: # dialect為開啟csv檔案的方式,預設是excel,delimiter="\t"引數指寫入的時候的分隔符 csv_writer = csv.writer(data_csv) csv_writer.writerow([item['index'], item['image'], item['title'], item['actor'],item['time'],item['area'],item['score']]) # 引數newline是用來控制文字模式之下,一行的結束字元。可以是None,’’,\n,\r,\r\n等。 ''' 也可判斷異常,一般沒錯 try: csv_writer = csv.writer(data_csv) csv_writer.writerow([item['index'], item['image'], item['title'], item['actor'],item['time'],item['area'],item['score']]) except Exception as e: print(e) print(item) ''' # 下載封面圖 #讀方式開啟的話,並不會新建;寫方式開啟的話就會新建。 r只讀,w可寫,a追加 def download_thumb(title,image): try: response = requests.get(image) # 獲取二進位制資料 with open('image/'+title+'.jpg', 'wb') as f: #將封面圖儲存到當前路徑下的image資料夾中,圖片名稱為:電影名.jpg f.write(response.content) f.close() except RequestException as e: print(e) pass # 主排程程式 def main(): # 起始URL start_url = 'http://maoyan.com/board/4?' for i in range(0,1000,10): # 獲取響應文字內容 html = get_one_page(url=start_url, offset=i) if html is None: print('連結:%s?offset=%s異常'.format(start_url,i)) continue for item in parse_one_page(html): # print(item) store_data(item) # download_thumb(item['title'],item['image']) # if __name__=='__main__': main() ''' if __name__=='__main__': for i in range(10): main(i*10) ''' ''' if __name__=='__main__': for i in range(10): main(i*10) pool=Pool() #可以提供指定數量的程序供使用者呼叫,如果有一個新的請求被提交到程序池,程序池還沒有滿,就會建立新的程序來執行請求,如果滿了,就先等待 pool.map(main,[i*10 for i in range(10)]) #將陣列中的每一個元素拿出來當做函式的引數,然後建立一個個的程序,放到程序池裡面去執行;第二個引數是構造一個數組,組成迴圈 #速度明顯變快!1s '''
def main(offset): url='http://maoyan.com/board/4?offset='+str(offset) html=get_one_page(url) # for item in parse_one_page(html): # print(item['number']) #能正確輸出 , charset="utf8" try: conn = pymysql.connect(host='localhost', user='root', passwd=' ', port=3306,db='test1',charset="utf8",use_unicode = False ) cur = conn.cursor() # 建立一個遊標物件 for item in parse_one_page(html): try: # sql = "INSERT INTO movies (number,picture,title,actors,time,area,score) VALUES (%s,%s,%s,%s,%s,%s,%s)" # cur.execute(sql, ( item['number'],item['picture'],item['title'],item['actors'],item['time'],item['area'],item['score'])) sql = "insert into test_movies (number,picture,title,actors,time,area,score) values(%s,%s,%s,%s,%s,%s,%s)" cur.execute(sql, (item['number'], item['picture'], item['title'], item['actors'], item['time'], item['area'],item['score'])) except pymysql.Error as e: print(e) print('- - - - - 資料儲存成功 - - - - -') conn.commit() cur.close() conn.close() # 關閉資料 except pymysql.Error as e: print("Mysql Error %d: %s" % (e.args[0], e.args[1])) if __name__=='__main__': # 連線資料庫 conn = pymysql.connect(host='localhost', user='root', passwd=' ', port=3306, db='test1', charset="utf8") cur = conn.cursor() # 建立一個遊標物件 cur.execute("DROP TABLE IF EXISTS test_movies") # 如果表存在則刪除 # 建立表sql語句 sqlc = """CREATE TABLE test_movies( number int not null primary key auto_increment, picture VARCHAR(100) NOT NULL, title VARCHAR(100) NOT NULL, actors VARCHAR(200) NOT NULL, time VARCHAR(100) NOT NULL, area VARCHAR(100) , score VARCHAR(50) NOT NULL )""" cur.execute(sqlc) # 執行建立資料表操作 pool=Pool() pool.map(main,[i*10 for i in range(10)])
相關推薦
【爬蟲】爬取貓眼電影top100
用正則表示式爬取 #!/usr/bin/python # -*- coding: utf-8 -*- import json # 快速匯入此模組:滑鼠先點到要匯入的函式處,再Alt + Enter進行選擇 from multiprocessing.pool im
爬蟲練習 | 爬取貓眼電影Top100
#coding=utf-8 _date_ = '2018/12/9 16:18' import requests import re import json import time def get_one_page(url): headers={ 'User-Agent':'Mozil
python爬蟲,爬取貓眼電影top100
import requests from bs4 import BeautifulSoup url_list = [] all_name = [] all_num = [] all_actor = [] all_score = [] class Product_url():
【Python】Requests+正則表示式 爬取貓眼電影TOP100
1.先獲取到一個頁面,狀態碼200是成功返回 def get_one_page(url): # 獲取一個頁面 try: response = requests.get(url) if response.status_cod
爬蟲(七):爬取貓眼電影top100
all for rip pattern 分享 爬取 values findall proc 一:分析網站 目標站和目標數據目標地址:http://maoyan.com/board/4?offset=20目標數據:目標地址頁面的電影列表,包括電影名,電影圖片,主演,上映日期以
Python爬蟲實戰之Requests+正則表示式爬取貓眼電影Top100
import requests from requests.exceptions import RequestException import re import json # from multiprocessing import Pool # 測試了下 這裡需要自己新增頭部 否則得不到網頁 hea
python爬蟲爬取貓眼電影top100
這個爬蟲我是跟著教程做的,也是第一次用python的re和multiprocessing(多執行緒),還知道了yield生成器的用法。不過re正則表示式真的厲害,但是學起來比較難,還在學習中。import requests import re import pymysql f
Python爬蟲-爬取貓眼電影Top100榜單
貓眼電影的網站html組成十分簡單。 地址就是很簡單的offset=x 這個x引數更改即可翻頁。 下面的資訊使用正則表示式很快就可以得出結果。 直接放程式碼: import json
【網路爬蟲】爬取豆瓣電影Top250評論
前言 本爬蟲大致流程為: (1)分析網頁——分析網站結構 (2)傳送請求——通過requests傳送請求 (3)響應請求——得到請求響應的頁面 (4)解析響應——分析頁面,得到想要的資料 (5)儲存文字——以txt格式儲存 使用環境 anaconda3 pyt
python爬蟲實戰-爬取貓眼電影榜單top100
貓眼電影是靜態網頁,並且不需要驗證碼,非常適合爬蟲的入門練習,流程如下-通過url連接獲取html內容,在html中通過正則表示式,我們提取排名,名稱,主演,上映時間等資訊,格式如下["9", "魂斷藍橋", "主演:費雯·麗,羅伯特·泰勒,露塞爾·沃特森", "上映時間:1
python爬蟲【例項】爬取豆瓣電影評分連結並圖示()-問題如何爬取電影圖片(解決有程式碼)
這裡只有尾巴,來分析一下確定範圍:如何爬取圖片並下載?參考:http://blog.csdn.net/chaoren666/article/details/53488083----------------------------------------------------
python網路爬蟲例項:Requests+正則表示式爬取貓眼電影TOP100榜
一、前言 最近在看崔慶才先生編寫的《Python3網路爬蟲開發實戰》這本書,學習了requests庫和正則表示式,爬取貓眼電影top100榜單是這本書的第一個例項,主要目的是要掌握requests庫和正則表示式在實際案例中的使用。 二、開發環境 執行平
python爬蟲實戰:利用pyquery爬取貓眼電影TOP100榜單內容-2
上次利用pyquery爬取貓眼電影TOP100榜單內容的爬蟲程式碼中點選開啟連結 存在幾個不合理點。1. 第一個就是自定義的create_file(檔案存在判斷及建立)函式。我在後來的python檔案功能相關學習中,發現這個自定義函式屬於重複造輪子功能。因為 for data
20170513爬取貓眼電影Top100
top compile bs4 etime http res XML n) quest import jsonimport reimport requestsfrom bs4 import BeautifulSoupfrom requests import RequestE
使用requests爬取貓眼電影TOP100榜單
esp 進行 得到 ensure .com key d+ odin pickle Requests是一個很方便的python網絡編程庫,用官方的話是“非轉基因,可以安全食用”。裏面封裝了很多的方法,避免了urllib/urllib2的繁瑣。 這一節使用request
python爬取貓眼電影top100排行榜
技術 所有 結果 mys url with 地址 保存 pic 爬取貓眼電影TOP100(http://maoyan.com/board/4?offset=90)1). 爬取內容: 電影名稱,主演, 上映時間,圖片url地址保存到mariadb數據庫中;2). 所有的圖片保
用Requests和正則表示式爬取貓眼電影(TOP100+最受期待榜)
目標站點分析 目標站點(貓眼榜單TOP100): 如下圖,貓眼電影的翻頁offset明顯在URL中,所以只要搞定第一頁的內容加上一個迴圈加上offset就可以爬取前100。 流程框架 1、抓取單頁內容 利用requests請求目標站點,得到單個網頁HTML程式碼,返回結
【Python】【爬蟲】爬取網易、騰訊、新浪、搜狐新聞到本地
這個實驗主要爬取新聞網站首頁的新聞內容儲存到本地,爬取內容有標題、時間、來源、評論數和正文。 工具:python 3.6 谷歌瀏覽器 爬取過程: 一、安裝庫:urllib、requests、BeautifulSoup 1、urllib庫:Urlli
多種方法爬取貓眼電影Top100排行榜,儲存到csv檔案,下載封面圖
參考連結:https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/83663400 因貓眼網站有些更新,參考連結中的部分程式碼執行報錯,特修改一下 #!/usr/bin/env python # -*- coding: utf-8
【Python】【爬蟲】爬取京東商品使用者評論(分析+視覺化)
----------------------------------------------------------------------------------------------------------------------------- 1:在商品頁面f1