scrapy新手向——爬取電影列表塞進小數(shù)據(jù)庫

步驟一 創(chuàng)建爬取項目:

1. 進入你的桌面文件夾
cd desktop
2. 創(chuàng)建爬蟲項目
scrapy startproject imove
3.創(chuàng)建爬蟲機器人,名字就叫movie
cd imove
scrapy genspider movie
4.調整settings.py
變更user-agent 
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'
拒絕機器人協(xié)議
ROBOTSTXT_OBEY = False
管道通
ITEM_PIPELINES = {
   'imovie.pipelines.ImoviePipeline': 300,
}

步驟二 初始化

  1. 在填入需要爬入的網(wǎng)站:http://****.com
    填入最開始的那個網(wǎng)頁 : http://****.com.index.html
allowed_domains = ['www.dytt8.net']
start_urls = ['https://www.dytt8.net/html/gndy/dyzz/index.html']
2. 爬取內容的結構化數(shù)據(jù)類型 items.py
import scrapy

class ImovieItem(scrapy.Item):
    title = scrapy.Field()
    date = scrapy.Field()
    url = scrapy.Field()

步驟三 填寫爬蟲規(guī)則

觀察網(wǎng)站票编,需要爬取電影名字、時間卵渴、詳情url地址慧域,方便繼續(xù)深入爬取

網(wǎng)頁的規(guī)則為:
(Xpath 語言)
//table
名字 = .//a/text()
日期 = .//td[@style='padding-left:3px']/font/text()
URL= 域名+  ".//a/@href" 

步驟四 實現(xiàn)自動翻頁

1. 判斷是否存在下一頁
if response.xpath("http://a[text()='下一頁']"):
2. 找出下一頁網(wǎng)址
(Xpath 語言)
//a[text()='下一頁']/@href
3. 點擊它!
yield self.make_requests_from_url(next_page)

步驟五 入庫

1. import sqlite3
2. sql 建表:
create table if not exists movies (title text ,date text , url text);
3. sql 查表
insert into movies (title,date,url) values (?,?,?);",(item["title"],item["date"],item["url"])
4. 數(shù)據(jù)庫驗證(可以不做)parse_sqlite.py

import sqlite3
import pandas as pd

conn = sqlite3.connect("data.sqlite")
df = pd.read_sql_query("select * from movies limit 5;", conn)
print(df)

步驟六 運行

scrapy crawl movie

運行結果:


image.png

全都保存在數(shù)據(jù)庫中浪读,方便下步操作

全部代碼:

# movie.py
# -*- coding: utf-8 -*-
import scrapy
from imovie.items import ImovieItem


class MovieSpider(scrapy.Spider):
    name = 'movie'
    allowed_domains = ['www.dytt8.net']
    start_urls = ['https://www.dytt8.net/html/gndy/dyzz/index.html']

    def parse(self, response):
        tables = response.xpath("http://table")
        imoveitem = ImovieItem()
        for table in tables:
            try:
                imoveitem["title"] = table.xpath(".//a/text()").extract_first()
                imoveitem["date"] = table.xpath(".//td[@style='padding-left:3px']/font/text()").extract_first().split()[0]
                imoveitem["url"] = "https://www.dytt8.net"+table.xpath(".//a/@href").extract_first()
            except:pass
            print(imoveitem)
            yield imoveitem

        if response.xpath("http://a[text()='下一頁']"):
            next_page = "https://www.dytt8.net/html/gndy/dyzz/"+response.xpath("http://a[text()='下一頁']/@href").extract_first()
            yield self.make_requests_from_url(next_page)


# items.py
import scrapy


class ImovieItem(scrapy.Item):
    title = scrapy.Field()
    date = scrapy.Field()
    url = scrapy.Field()


# pipelines.py

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import sqlite3


class ImoviePipeline(object):
    def __init__(self):
        self.conn = sqlite3.connect("data.sqlite")
        cur = self.conn.cursor()
        # with  self.conn.cursor() as cur:
        #     cur.execute("create table movies (titie text ,date text , url text);")
        cur.execute("create table if not exists movies (title text ,date text , url text);")
        cur.close()

    def process_item(self, item, spider):
        cur = self.conn.cursor()
        # with self.conn.cursor() as cur:
        #     cur.execute("insert into movies (title,date,url) values (?,?,?);",(item["title"],item["date"],item["url"]))
        cur.execute("insert into movies (title,date,url) values (?,?,?);",(item["title"],item["date"],item["url"]))
        self.conn.commit()
        print("插入成功!")
        cur.close()
        return item

# parse_sqlite.py

import sqlite3
import pandas as pd

conn = sqlite3.connect("data.sqlite")
df = pd.read_sql_query("select * from movies;", conn)
print(df)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末昔榴,一起剝皮案震驚了整個濱河市辛藻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌互订,老刑警劉巖吱肌,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仰禽,居然都是意外死亡氮墨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門吐葵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來规揪,“玉大人,你說我怎么就攤上這事温峭∶颓Γ” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵凤藏,是天一觀的道長奸忽。 經(jīng)常有香客問我,道長揖庄,這世上最難降的妖魔是什么栗菜? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮抠艾,結果婚禮上苛萎,老公的妹妹穿的比我還像新娘。我一直安慰自己检号,他們只是感情好腌歉,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著齐苛,像睡著了一般翘盖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凹蜂,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天馍驯,我揣著相機與錄音,去河邊找鬼玛痊。 笑死汰瘫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的擂煞。 我是一名探鬼主播混弥,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼对省!你這毒婦竟也來了蝗拿?” 一聲冷哼從身側響起晾捏,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哀托,沒想到半個月后惦辛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仓手,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年胖齐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俗或。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡市怎,死狀恐怖,靈堂內的尸體忽然破棺而出辛慰,到底是詐尸還是另有隱情区匠,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布帅腌,位于F島的核電站驰弄,受9級特大地震影響,放射性物質發(fā)生泄漏速客。R本人自食惡果不足惜戚篙,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溺职。 院中可真熱鬧岔擂,春花似錦、人聲如沸浪耘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽七冲。三九已至痛倚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澜躺,已是汗流浹背蝉稳。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掘鄙,地道東北人耘戚。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像操漠,于是被迫代替她去往敵國和親收津。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容