啟動MySQL的爬取代碼功能。

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出康巴什免費做網(wǎng)站回饋大家。
1、IDEA想要爬取咸魚數(shù)據(jù)存儲到MYSQL里面,首先打開任務(wù)管理器開啟MySQL服務(wù)。
2、打開后連接到數(shù)據(jù)庫,建表打上勾,防止運行會報錯,即可爬取。
去裝一個 pymsql包
然后
import?pymysql??#導(dǎo)入pymsql模塊
#鏈接數(shù)據(jù)庫,注意port是int型,不是str,所以不要用引號
conn?=?pymysql.connect(
user='root',
password='root',
host='127.0.0.1',
port=3306,
database='test_demo',
use_unicode=True,
charset="utf8"
)
#獲取游標
cursor?=?conn.cursor()
#插入數(shù)據(jù),注意看有變量的時候格式
cursor.execute("INSERT?INTO?tieba_user(`uuid`,`user_name`,`user_rank`,`user_level`,`level_status`,`tieba_name`)?VALUES?(%s,%s,%s,%s,%s,%s)",?(user_id,?user_name,?user_rank,?user_level,?level_statu,?tieba_name))
#提交
conn.commit()
#關(guān)閉連接
cursor.close()
類似這樣
1.win10 下 win + r 打開cmd 切換新項目的目錄
2.新建scrapy項目的命令:
可以利用pycharm 打開項目文件夾編輯項目
3.items.py
聲明爬取的字段
4.新建scrapy 爬蟲
用命令 scrapy genspider doubanmovie "movie.douban.com" 創(chuàng)建爬蟲。
5.運行爬蟲
5.1 創(chuàng)建運行腳本
(一)、在 scrapy.cfg 同級目錄下創(chuàng)建 pycharm 調(diào)試腳本 run.py,避免每次運行爬蟲輸入密碼,內(nèi)容如下:
6.修改robottxt協(xié)議
修改 settings 中的 ROBOTSTXT_OBEY = True 參數(shù)為 False,因為默認為 True,就是要遵守 robots.txt 的規(guī)則, robots.txt 是遵循 Robot協(xié)議 的一個文件,它保存在網(wǎng)站的服務(wù)器中,它的作用是,告訴搜索引擎爬蟲,本網(wǎng)站哪些目錄下的網(wǎng)頁不希望你進行爬取收錄。在 Scrapy 啟動后,會在第一時間訪問網(wǎng)站的 robots.txt 文件,然后決定該網(wǎng)站的爬取范圍。查看 robots.txt 可以直接網(wǎng)址后接 robots.txt 即可。
一般構(gòu)建爬蟲系統(tǒng),建議自己編寫Item Pipeline,就可以在open(path)選擇自己的保存路徑
參考: # scrapy爬蟲事件以及數(shù)據(jù)保存為txt,json,mysql
7.1保存為json格式時出現(xiàn)亂碼的解決方式:
scrapy抓取豆瓣書籍保存json文件亂碼問題
中文默認是Unicode,如:
\u5317\u4eac\u5927\u5b66
在setting文件settings.py中設(shè)置:
就可以解決了
第二種解決辦法
或在cmd中傳入 -s FEED_EXPORT_ENCODING='utf-8'
參考:
通過計算機上安裝爬蟲的程序。可以通過設(shè)計一個cookie池來實現(xiàn),動態(tài)定時登錄一批賬號,獲取cookie之后存放在數(shù)據(jù)庫中(redis,MySQL等等),請求的時候從數(shù)據(jù)庫中獲取一條可用cookie,獲取icews數(shù)據(jù)。
在之前的文章中Python實現(xiàn)“維基百科六度分隔理論“之基礎(chǔ)爬蟲,我們實現(xiàn)了在一個網(wǎng)站上隨機地從一個鏈接到另一個鏈接,但是,如果我們需要系統(tǒng)地把整個網(wǎng)站按目錄分類,或者要搜索網(wǎng)站上的每一個頁面,我們該怎么辦?我們需要采集整個網(wǎng)站,但是那是一種非常耗費內(nèi)存資源的過程,尤其是處理大型網(wǎng)站時,比較合適的工具就是用一個數(shù)據(jù)庫來存儲采集的資源,之前也說過。下面來說一下怎么做。
網(wǎng)站地圖sitemap
網(wǎng)站地圖,又稱站點地圖,它就是一個頁面,上面放置了網(wǎng)站上需要搜索引擎抓取的所有頁面的鏈接(注:不是所有頁面,一般來說是所有文章鏈接。大多數(shù)人在網(wǎng)站上找不到自己所需要的信息時,可能會將網(wǎng)站地圖作為一種補救措施。搜索引擎蜘蛛非常喜歡網(wǎng)站地圖。
對于SEO,網(wǎng)站地圖的好處:
1.為搜索引擎蜘蛛提供可以瀏覽整個網(wǎng)站的鏈接簡單的體現(xiàn)出網(wǎng)站的整體框架出來給搜索引擎看;
2.為搜索引擎蜘蛛提供一些鏈接,指向動態(tài)頁面或者采用其他方法比較難以到達的頁面;
3.作為一種潛在的著陸頁面,可以為搜索流量進行優(yōu)化;
4.如果訪問者試圖訪問網(wǎng)站所在域內(nèi)并不存在的URL,那么這個訪問者就會被轉(zhuǎn)到“無法找到文件”的錯誤頁面,而網(wǎng)站地圖可以作為該頁面的“準”內(nèi)容。
數(shù)據(jù)采集
采集網(wǎng)站數(shù)據(jù)并不難,但是需要爬蟲有足夠的深度。我們創(chuàng)建一個爬蟲,遞歸地遍歷每個網(wǎng)站,只收集那些網(wǎng)站頁面上的數(shù)據(jù)。一般的比較費時間的網(wǎng)站采集方法從頂級頁面開始(一般是網(wǎng)站主頁),然后搜索頁面上的所有鏈接,形成列表,再去采集到的這些鏈接頁面,繼續(xù)采集每個頁面的鏈接形成新的列表,重復(fù)執(zhí)行。
很明顯,這是一個復(fù)雜度增長很快的過程。加入每個頁面有10個鏈接,網(wǎng)站上有5個頁面深度,如果采集整個網(wǎng)站,一共得采集的網(wǎng)頁數(shù)量是105,即100000個頁面。
因為網(wǎng)站的內(nèi)鏈有很多都是重復(fù)的,所以為了避免重復(fù)采集,必須鏈接去重,在Python中,去重最常用的方法就是使用自帶的set集合方法。只有“新”鏈接才會被采集。看一下代碼實例:
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages = set()def getLinks(pageurl):globalpageshtml= urlopen("" + pageurl)soup= BeautifulSoup(html)forlink in soup.findAll("a", href=re.compile("^(/wiki/)")):if'href' in link.attrs:iflink.attrs['href'] not in pages:#這是新頁面newPage= link.attrs['href']print(newPage)pages.add(newPage)getLinks(newPage)getLinks("")
原理說明:程序執(zhí)行時,用函數(shù)處理一個空URL,其實就是維基百科的主頁,然后遍歷首頁上每個鏈接,并檢查是否已經(jīng)在全局變量集合pages里面,如果不在,就打印并添加到pages集合,然后遞歸處理這個鏈接。
遞歸警告:Python默認的遞歸限制是1000次,因為維基百科的鏈接浩如煙海,所以這個程序達到遞歸限制后就會停止。如果你不想讓它停止,你可以設(shè)置一個遞歸計數(shù)器或者其他方法。
采集整個網(wǎng)站數(shù)據(jù)
為了有效使用爬蟲,在用爬蟲的時候我們需要在頁面上做一些事情。我們來創(chuàng)建一個爬蟲來收集頁面標題、正文的第一個段落,以及編輯頁面的鏈接(如果有的話)這些信息。
第一步,我們需要先觀察網(wǎng)站上的頁面,然后制定采集模式,通過F12(一般情況下)審查元素,即可看到頁面組成。
觀察維基百科頁面,包括詞條和非詞條頁面,比如隱私策略之類的頁面,可以得出下面的規(guī)則:
所有的標題都是在h1→span標簽里,而且頁面上只有一個h1標簽。
所有的正文文字都在div#bodyContent標簽里,如果我們想獲取第一段文字,可以用div#mw-content-text→p,除了文件頁面,這個規(guī)則對所有頁面都適用。
編輯鏈接只出現(xiàn)在詞條頁面上,如果有編輯鏈接,都位于li#ca-edit標簽的li#ca-edit→span→a里面。
調(diào)整一下之前的代碼,我們可以建立一個爬蟲和數(shù)據(jù)采集的組合程序,代碼如下:
import redef getLinks(pageUrl):global pageshtml = urlopen("" + pageUrl)soup = BeautifulSoup(html)try:print(soup.h1.get_text())print(soup.find(id="mw-content-text").findAll("p")[0])print(soup.find(id="ca-edit").find("span").find("a").attrs['href'])except AttributeError:print("頁面缺少屬性")for link in soup.findAll("a", href =re.compile("^(/wiki/)")):if 'href' in link.attrs:#這是新頁面newPage = link.attrs['href']print("------------------\n"+newPage)
這個for循環(huán)和原來的采集程序基本上是一樣的,因為不能確定每一頁上都有所有類型的數(shù)據(jù),所以每個打印語句都是按照數(shù)據(jù)在頁面上出現(xiàn)的可能性從高到低排列的。
數(shù)據(jù)存儲到MySQL
前面已經(jīng)獲取了數(shù)據(jù),直接打印出來,查看比較麻煩,所以我們就直接存到MySQL里面吧,這里只存鏈接沒有意義,所以我們就存儲頁面的標題和內(nèi)容。前面我有兩篇文章已經(jīng)介紹過如何存儲數(shù)據(jù)到MySQL,數(shù)據(jù)表是pages,這里直接給出代碼:
import reimport datetimeimport randomimport pymysqlconn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '19930319', db = 'wiki', charset ='utf8mb4')cur = conn.cursor()cur.execute("USE wiki")#隨機數(shù)種子random.seed(datetime.datetime.now())#數(shù)據(jù)存儲def store(title, content):cur.execute("INSERT INTO pages(title, content)VALUES(\"%s\", \"%s\")", (title, content))cur.connection.commit()def getLinks(articleUrl):html = urlopen("" + articleUrl)title = soup.find("h1").get_text()content =soup.find("div",{"id":"mw-content-text"}).find("p").get_text()store(title, content)returnsoup.find("div",{"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))#設(shè)置第一頁links =getLinks("/wiki/Kevin_Bacon")try:while len(links)0:newArticle = links[random.randint(0, len(links)-1)].attrs['href']print (newArticle)links = getLinks(newArticle)finally:cur.close()conn.close()
小結(jié)
今天主要講一下Python中遍歷采集一個網(wǎng)站的鏈接,方便下面的學(xué)習(xí)。
希望通過上面的操作能幫助大家。如果你有什么好的意見,建議,或者有不同的看法,我都希望你留言和我們進行交流、討論。
網(wǎng)頁題目:mysql怎么弄爬蟲 爬蟲 mysql
鏈接分享:http://chinadenli.net/article38/hijgpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站內(nèi)鏈、服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站收錄、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)