成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【爬蟲(chóng)】菜鳥(niǎo)教程,支持翻頁(yè),存儲(chǔ)

Scott / 3073人閱讀

摘要:項(xiàng)目簡(jiǎn)介豆瓣相信很多人都爬過(guò),我也把我的方法拿出來(lái)交流學(xué)習(xí),我也是菜鳥(niǎo)過(guò)來(lái)的,不會(huì)省略代碼,此教程純屬娛樂(lè),大神勿噴。創(chuàng)建數(shù)據(jù)庫(kù)目標(biāo)網(wǎng)頁(yè)分析這個(gè)教程中,我們需要爬取豆瓣的電影名序號(hào)和相應(yīng)的評(píng)分。

1、項(xiàng)目簡(jiǎn)介

豆瓣相信很多人都爬過(guò),我也把我的方法拿出來(lái)交流學(xué)習(xí),我也是菜鳥(niǎo)過(guò)來(lái)的,不會(huì)省略代碼,此教程純屬娛樂(lè),大神勿噴。

2、工具

requests

re

pygal

mysql

Anacond2

3、爬蟲(chóng)完整代碼
# encoding:UTF-8
import re
import requests
import MySQLdb
from bs4 import BeautifulSoup

headers = {"User-Agent" :"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}


def getPage(get_url):
    r=requests.get(get_url)
    response = r.text
    return response
def filterpage():
    pageCode = getPage(get_url)
    pattern = re.compile("(.*?).*?(.*?).*?(.*?)",re.S)
    items = re.findall(pattern,pageCode)
    pageStories = []
    for item in items:
        pageStories.append([item[0].strip(),item[1].strip(),item[2].strip()])
    return pageStories
def save_data():
    Dbdata=filterpage()
    db=MySQLdb.connect(host="localhost",user="root",passwd="******",db="movie",charset="utf8")
    cursor=db.cursor()
    for a in Dbdata:
        id=a[0]
        name=a[1]
        grade=a[2]
        #comment=a[3]
        value=[id,name,grade]
        cursor.execute("insert into movie_info values(%s,%s,%s)",value)
        db.commit()
def main():
    pageStories=filterpage()
    #print pageStories
    for story in pageStories:
        try:
            print u"序號(hào):",story[0],u"電影名:",story[1], u"	評(píng)分:", story[2]
        except:
            pass

if __name__ == "__main__":
    get_url = "https://movie.douban.com/top250/"
    i=1
    while i < 11:
        main()
        save_data()
        print u"頁(yè)碼",i
        num = i * 25
        get_url = "https://movie.douban.com/top250?start=" + str(num) + "&filter="
        i = i + 1

4、前期準(zhǔn)備

install mysql
我是在windows環(huán)境下跑爬蟲(chóng)的,用的是MySQL5.7,下載地址:https://dev.mysql.com/downloa...

值得一提的是,mysql的安裝,window版的mysql安裝起來(lái)說(shuō)實(shí)話還是比較麻煩的,我裝了很久,沒(méi)成功,最后選擇下載壓縮版安裝。安裝完之后,在mysql目錄下創(chuàng)建my.ini配置文件,輸入以下代碼:

[mysqld] 
tmpdir=F:mysql-5.7.18-winx64   # 安裝目錄
datadir=F:mysql-5.7.18-winx64data   # data目錄,沒(méi)有data目錄請(qǐng)手動(dòng)創(chuàng)建
early-plugin-load=""
skip-grant-tables

點(diǎn)擊保存,data目錄是mysql初始化會(huì)用到的目錄,一般是空目錄,不然初始化不通過(guò)。特別是“ 服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤。 請(qǐng)鍵入 NET HELPMSG 3534”錯(cuò)誤。然后添加mysql的環(huán)境路徑。

cmd輸入:

cd F:mysql-5.7.18-winx64in # 進(jìn)入bin目錄,不然有可能會(huì)報(bào)錯(cuò)
mysqld initialize  # 初始化命令
net start mysql    # 啟動(dòng)服務(wù)

創(chuàng)建數(shù)據(jù)表,我們需要保存的數(shù)據(jù)有ID,評(píng)分grade,還有電影名name。

mysql>create database movie   # 創(chuàng)建movie數(shù)據(jù)庫(kù)
mysql>use movie # 
mysql>create table movie_info (id varchar(100),name varchar(100),grade decimal(3,1));
5、目標(biāo)網(wǎng)頁(yè)分析

這個(gè)教程中,我們需要爬取豆瓣top250的電影名、序號(hào)和相應(yīng)的評(píng)分。F12分析網(wǎng)頁(yè)結(jié)構(gòu)。找到有《肖申克的救贖》的代碼處:

1   # 序號(hào)
.
.
.      
肖申克的救贖 # 電影名
.
.
.
9.6  # 評(píng)分

ok,往后翻,可以看到剩下的都是這類的結(jié)構(gòu),我們找到規(guī)律了,就可以想辦法,把里面的東西給搞出來(lái)。
一般常用的有re模塊和beautifulsoup模塊,我是用re模塊正則匹配,感覺(jué)正則更強(qiáng)大一點(diǎn),漂亮湯模塊用起來(lái)簡(jiǎn)單,但是速度慢。

6、代碼分析 6.1 爬取頁(yè)面代碼
def getPage(get_url):            # 定義一個(gè)抓取網(wǎng)頁(yè)的方法
    r=requests.get(get_url)      # get到目標(biāo)網(wǎng)頁(yè)
    response = r.text
    return response              # 返回抓取到的網(wǎng)頁(yè)

爬蟲(chóng)開(kāi)始爬,就是給web服務(wù)器一個(gè)請(qǐng)求,然后抓取到返回信息。

HTTP 請(qǐng)求方法有 OPTIONS、GET、HEAD、post、PUT、DELETE、TRACE、CONNECT,其中比較常用的有g(shù)et和post,其他的都不常見(jiàn),判斷請(qǐng)求方式很重要。自行百度。

6.2 頁(yè)面代碼處理
def filterpage():              # 頁(yè)面處理方法
    pageCode = getPage(get_url)   #傳參
    pattern = re.compile("(.*?).*?(.*?).*?(.*?)",re.S)
    items = re.findall(pattern,pageCode)
    pageStories = []        # 定義一個(gè)空數(shù)組,用來(lái)存分離出來(lái)的數(shù)據(jù)
    for item in items:      # 迭代
        pageStories.append([item[0].strip(),item[1].strip(),item[2].strip()])# 去除空格
    return pageStories

正則表達(dá)式,在程序剛開(kāi)始,我們導(dǎo)入了python的re模塊,這個(gè)模塊專門(mén)處理正則匹配,詳細(xì)教程點(diǎn)這里

我們用第一個(gè)(.*?)非貪婪匹配來(lái)匹配序號(hào),接著用.*?貪婪匹配匹配不需要的代碼,往后同樣用非貪婪匹配來(lái)匹配我們需要的信息。

接著用strip()方法去除空格。返回得到的字符串pageStories。

6.3 數(shù)據(jù)存儲(chǔ)
def save_data(): 
    Dbdata=filterpage() #傳參
    db=MySQLdb.connect(host="localhost",user="root",passwd="suyu.123",db="movie",charset="utf8") # 鏈接數(shù)據(jù)庫(kù)
    cursor=db.cursor() # 定義游標(biāo)
    for a in Dbdata:   # 迭代存儲(chǔ)數(shù)據(jù)
        id=a[0]
        name=a[1]
        grade=a[2]
        value=[id,name,grade]
        cursor.execute("insert into movie_info values(%s,%s,%s)",value) # sql命令存數(shù)據(jù)
        db.commit()   # 別忘記提交變更

python操作mysql,感覺(jué)沒(méi)啥好講的了。。

6.4主函數(shù)
def main():
    pageStories=filterpage()   # 傳參
    for story in pageStories:  # 迭代打印
        try:
            print u"序號(hào):",story[0],u"電影名:",story[1], u"	評(píng)分:", story[2]
        except:
            pass

主函數(shù)主要是用來(lái)打印出我們抓取的數(shù)據(jù)。

6.5運(yùn)行程序
if __name__ == "__main__":
    get_url = "https://movie.douban.com/top250/" # 起始網(wǎng)頁(yè)
    i=1
    while i < 11:
        main()                  # 運(yùn)行主函數(shù)
        save_data()             # 運(yùn)行存儲(chǔ)函數(shù)
        print u"頁(yè)碼",i         # 
        num = i * 25
        get_url = "https://movie.douban.com/top250?start=" + str(num) + "&filter="
        i = i + 1

通過(guò)豆瓣top250的頁(yè)面分析可以知道,總共有10頁(yè),所以我們?cè)O(shè)置i<11,整個(gè)豆瓣電影top250的網(wǎng)址很有規(guī)律,第一頁(yè)是:https://movie.douban.com/top250,第二頁(yè)就是:https://movie.douban.com/top2...,這樣的網(wǎng)頁(yè)有規(guī)律,我喜歡,所以我們可以用迭代來(lái)表示所有網(wǎng)頁(yè),豆瓣業(yè)界良心啊。

7、運(yùn)行結(jié)果

GitHub地址:https://github.com/legolas-ze...

還有剩下的svg統(tǒng)計(jì)圖,就下次更新吧。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40694.html

相關(guān)文章

  • pyspider 爬蟲(chóng)教程(一):HTML 和 CSS 選擇器

    摘要:但是感覺(jué)還是需要一篇的教程,不然沒(méi)有一個(gè)總體的認(rèn)識(shí)。修飾器,表示每天會(huì)執(zhí)行一次,這樣就能抓到最新的電影了。不過(guò)更推薦使用選擇器。既然前端程序員都使用選擇器為頁(yè)面上的不同元素設(shè)置樣式,我們也可以通過(guò)它定位需要的元素。 雖然以前寫(xiě)過(guò) 如何抓取WEB頁(yè)面 和 如何從 WEB 頁(yè)面中提取信息。但是感覺(jué)還是需要一篇 step by step 的教程,不然沒(méi)有一個(gè)總體的認(rèn)識(shí)。不過(guò),沒(méi)想到這個(gè)教程居...

    ShevaKuilin 評(píng)論0 收藏0
  • node爬蟲(chóng)快速入門(mén)

    摘要:爬蟲(chóng)初入前端,剛剛接觸,對(duì)于耳聞已久的爬蟲(chóng)非常神往,所以有了這篇文章,項(xiàng)目代碼在文章末尾需求抓取天涯論壇重慶地區(qū)板塊的文章列表信息。 node爬蟲(chóng) 初入前端,剛剛接觸node,對(duì)于耳聞已久的node爬蟲(chóng)非常神往,所以有了這篇文章,項(xiàng)目代碼在文章末尾 需求 抓取天涯論壇重慶地區(qū)板塊的文章列表信息。 使用工具 node.js superagent(客戶端請(qǐng)求代理模塊) cheerio...

    simon_chen 評(píng)論0 收藏0
  • python爬蟲(chóng)學(xué)習(xí)教程,爬取網(wǎng)易云音樂(lè)!

    摘要:其次,使用后,還需要針對(duì)做特定處理。看到這就可以構(gòu)想一下爬蟲(chóng)的爬取邏輯了。 運(yùn)行環(huán)境 我的運(yùn)行環(huán)境如下: 系統(tǒng)版本 Windows10。 Python版本 Python3.5,推薦使用Anaconda 這個(gè)科學(xué)計(jì)算版本,主要是因?yàn)樗詭б粋€(gè)包管理工具,可以解決有些包安裝錯(cuò)誤的問(wèn)題。去Anaconda官網(wǎng),選擇Python3.5版本,然后下載安裝。 IDE 我使用的是PyCharm,是專...

    Olivia 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<