scarpy 筆記三 實戰一

2022-08-14 06:57:18 字數 4201 閱讀 2860

我們開始爬蟲前,基本按照以下步驟來做:

1.爬蟲步驟:新建專案,明確爬蟲目標,製作爬蟲,儲存爬蟲內容

2.1 建立專案

1.開啟pycharm -> 點開terminal (或者命令列都可以)輸入 

scrapy startproject douban
2.匯入 douban scrapy專案,專案結構如下

--spiders 爬蟲主檔案,爬蟲檔案在這個裡面編寫

--items 資料結構檔案,封裝提取的檔案字段,儲存爬取到的資料的容器

--settings 專案設定檔案

--pipelines 專案中的pipelines檔案

2.2 分析**

->需求:

1.目標站點:

3.獲取所有頁數的 電影資訊

2.3 步驟

1.編輯items.py

資料結構檔案,簡單的理解成,爬取的資料都存在這裡面,要單獨定義個字段以字典的形式去儲存

class doubanitem(scrapy.item):

# define the fields for your item here like:

# name = scrapy.field()

#序號serial_number = scrapy.field()

#電影名稱

movie_name = scrapy.field()

#電影介紹

movie_introduce = scrapy.field()

#星級movie_start = scrapy.field()

movie_evaluate = scrapy.field()

#電影描述

movie_describe = scrapy.field()

2.編輯settings.py,編輯 user_agent

3.在spiders下面新增douban_spider.py

class doubanspiderspider(scrapy.spider):

#爬蟲名

name = 'douban_spider'

#允許爬蟲的網域名稱

allowed_domains = ['movie.douban.com']

start_urls = ['']

print(response.text)

def parse(self, response):

print(response.text)

4.我們來執行一下,開啟pycharm-terminal-輸入scrapy crawl douban_spider

5.但是每次輸入的話,都很麻煩,我們新建乙個run_main.py,每次執行這個檔案就可以了

from scrapy import cmdline

cmdline.execute('scrapy crawl douban_spider'.split())

6.獲取單個頁面資訊**

知識點:

1.用xpath解析網頁

2..extract()  通過xpath獲取的是selector,我們在通過extract()方法得到內容 extract_first(),獲取第乙個內容

3.yield 返回內容

def parse(self, response):

#單個頁面的電影列表

movie_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')

for i_item in movie_list:

#宣告item.py方法

douban_item = doubanitem()

douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()

douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//span[@class='title']/text()").extract_first()

douban_item['movie_introduce'] = i_item.xpath(".//div[@class='bd']//span[@class='inq']/text()").extract_first()

douban_item['movie_start'] = i_item.xpath(".//div[@class='star']//span[@class='rating_num']/text()").extract_first()

douban_item['movie_evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first()

content = i_item.xpath(".//div[@class='item']//div[@class ='bd']//p/text()").extract()

yield douban_item

7.獲取所有的完整的頁面**

class doubanspiderspider(scrapy.spider):

#爬蟲名

name = 'douban_spider'

#允許爬蟲的網域名稱

allowed_domains = ['movie.douban.com']

start_urls = ['']

def parse(self, response):

movie_list = response.xpath('//*[@id="content"]/div/div[1]/ol/li')

for i_item in movie_list:

douban_item = doubanitem()

douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first()

douban_item['movie_name'] = i_item.xpath(".//div[@class='info']//span[@class='title']/text()").extract_first()

douban_item['movie_introduce'] = i_item.xpath(".//div[@class='bd']//span[@class='inq']/text()").extract_first()

douban_item['movie_start'] = i_item.xpath(".//div[@class='star']//span[@class='rating_num']/text()").extract_first()

douban_item['movie_evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first()

content = i_item.xpath(".//div[@class='item']//div[@class ='bd']//p/text()").extract()

yield douban_item

next_link = response.xpath("//*[@id='content']//span[@class='next']//link/@href").extract()

#如果是true,執行,並且**self.parse

if next_link:

next_link = next_link[0]

print(next_link)

yield scrapy.request(""+next_link,callback=self.parse)

python實戰筆記(三)

資料型別 補充 上一部分 函式 集合無序的,不可隨機訪問的,不可重複的元素集合 可變集合的表示 直接表示 s print s,type s set iterable s1 set abc s2 set 1,2,3 print s1,s2 集合推導 參考列表推導 s print s 不可變集合 fro...

python實戰筆記(一)

python注釋 python變數 python運算子 python輸入輸出 分支 迴圈 單行注釋 這是乙個單行注釋 print test 多行注釋 這裡就是python的多行注釋方式 可以直接分行進行注釋操作 本質上是字串 import this print hello world 特殊注釋變數使...

《機器學習實戰》閱讀筆記(三)

接上篇 2.2.3準備資料 歸一化數值 由於數值較大的值會產生較大的影響,所以需要歸一化,公式如下 newvalue oldvalue min max min 歸一化函式如下 def autonorm dataset minvals dataset.min 0 maxvals dataset.max...