我們先觀察豆瓣電影top250任意一頁的url位址的格式。先觀察第二頁。
豆瓣top page2
熟悉了url格式,下面用urllib庫試著抓取頁面內容我們以物件導向的編碼方式編寫這個頁面抓取程式。定義乙個類名movietop,在類中定義乙個初始化方法和乙個獲取頁面的方法。
我們把一些基本資訊和引數初始化放在類的初始化中,即init方法。另外,獲取頁面的方法,我們需要知道從第幾條記錄開始查詢、每次查詢多少條記錄。在這個方法中需要乙個迴圈,通過迴圈抓取需要的記錄。:
#! /usr/bin/python3
#-*- coding:utf-8 -*-
from urllib import request
import re
class movietop(object):
def __init__(self):
self.start=0
self.param='&filter='
self.headers=
def get_page(self):
page_content=
try:
while self.start<=225:
url=''+str(self.start)
req=request.request(url,headers=self.headers)
response=request.urlopen(req)
page=response.read().decode('utf-8')
page_num=(self.start+25)//25
print('正在抓取第'+str(page_num)+'頁資料...')
self.start+=25
return page_content
except request.urlerror as e:
if hasattr(e,'reason'):
print('抓取失敗,失敗原因:',e.reason)
def main(self):
print('開始從豆瓣電影抓取資料......')
a=self.get_page()
print('資料抓取完畢...')
在這個初步構建的程式中,我們只指定了一些資料爬取引數,對於爬取的資料並沒有做任何處理,也沒有儲存爬取資料。該程式可以校驗該爬蟲是否可以正常執行。
當前我們抓取的資料中有許多html格式的文字,需要將其過濾。
python中的re模組為我們提供了乙個compile函式,該函式可以幫我們把正規表示式語法轉化為正規表示式物件。
html_text='導演:馮小剛
'reobj=re.compile(u'導演:(.*?)
.*?')
print(reobj.findall(html_text))
執行結果:
['馮小剛']
乙個更複雜的示例:
html_text='導演:陳凱歌 kaige chen '\
'主演:張國榮 leslie cheung/ 張豐毅 fengyi zha…
'\ '1993 / 中國大陸 香港 / 劇情 愛情
'#s='740137人評價'
reobj1=re.compile(u'導演:(.*?)'
+u' (.*?)
' +u'(.*?) / (.*?)'
+u' / (.*?)
.*?')
print(reobj.findall(html_text))
程式執行結果:
[('陳凱歌 kaige chen', '主演:張國榮 leslie cheung/ 張豐毅 fengyi zha…', '1993', '中國大陸 香港', '劇情 愛情')]
在movietop類中,我們可以通過這種方式從一長串雜亂的html文字中提取一些精煉的資訊。:
def get_movie_info(set):
pattern=re.compile(u'.*?'……)
……
寫入檔案的過程很簡單;
file_top=open(self.file_path,'w',encoding='utf-8')
file_top.write(obj)
我們編寫乙個方法專門用於檔案的寫入操作,使得程式物件導向化。在movietop類中定義乙個方法;
def write_text(self):
print('開始向檔案寫入資料……')
file_top=open(self.file_path,'w',encoding='utf-8')
……
scrapy抓取豆瓣電影TOP250
scrapy入門級的學習 關於scrapy學習的要點 1 css選擇器選擇元素 scrapy提供css和xpath兩種選擇器來提取html元素,因為我對css更熟,這裡用的就是css。2 對item和pipeline的理解 item是存放資料的容器,pipline用來處理抓取後放在item中的資料。...
python爬蟲豆瓣top250電影,評分,評論等
import requests from bs4 import beautifulsoup def get movies movie list for i in range 0,10 link str i 25 r requests.get link,headers headers,timeout ...
爬取豆瓣電影TOP250
利用css選擇器對電影的資訊進行爬取 import requests import parsel import csv import time import re class cssspider def init self self.headers defget dp self,url respon...