新聞中心
隨著互聯(lián)網(wǎng)的不斷發(fā)展和普及,網(wǎng)頁(yè)數(shù)量和種類(lèi)不斷增加,越來(lái)越多的信息需要被收集和整理。而網(wǎng)頁(yè)抓取技術(shù)正是用來(lái)實(shí)現(xiàn)這一目標(biāo)的工具之一。Linux作為當(dāng)今更受歡迎的操作系統(tǒng)之一,擁有強(qiáng)大的命令行界面和豐富的開(kāi)源軟件,其應(yīng)用領(lǐng)域也變得越來(lái)越廣泛。本文將介紹如何在Linux環(huán)境下使用爬蟲(chóng)技術(shù)實(shí)現(xiàn)網(wǎng)頁(yè)數(shù)據(jù)庫(kù)的抓取。

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的茄子河網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
一、常用的網(wǎng)頁(yè)抓取工具
在Linux系統(tǒng)下,有許多強(qiáng)大的開(kāi)源工具可以用來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)抓取。以下列舉幾種常用的工具:
1. wget
wget是一種常用的命令行工具,用來(lái)從網(wǎng)絡(luò)上下載文件。它不僅可以下載整個(gè)網(wǎng)站,還可以指定下載某些文件或文件類(lèi)型。wget不支持JavaScript和動(dòng)態(tài)網(wǎng)頁(yè)抓取。
2. curl
curl是另一種常用的命令行工具,用來(lái)處理URL(Uniform Resource Locator)和相關(guān)的協(xié)議。它支持多種協(xié)議,包括HTTP、FTP、TP等。curl也支持JavaScript和動(dòng)態(tài)網(wǎng)頁(yè)抓取。
3. scrapy
scrapy是一個(gè)Python開(kāi)源的web爬蟲(chóng)框架,可以用來(lái)抓取各種網(wǎng)站。它的核心是一個(gè)調(diào)度器,可以根據(jù)需求自行定義抓取規(guī)則,支持多線(xiàn)程抓取。
二、網(wǎng)頁(yè)抓取的基本流程
網(wǎng)頁(yè)抓取的基本流程如下:
1. 獲取網(wǎng)頁(yè)源碼
獲取網(wǎng)頁(yè)源碼是網(wǎng)頁(yè)抓取的之一步。在Linux系統(tǒng)中,可以使用wget或curl命令來(lái)獲取網(wǎng)頁(yè)源碼。如下所示:
使用wget命令獲取網(wǎng)頁(yè)源碼:
wget http://www.bdu.com
使用curl命令獲取網(wǎng)頁(yè)源碼:
curl http://www.bdu.com
2. 解析網(wǎng)頁(yè)源碼
獲取網(wǎng)頁(yè)源碼后,需要對(duì)其進(jìn)行解析。解析網(wǎng)頁(yè)源碼的主要方式是使用正則表達(dá)式或XPath語(yǔ)法來(lái)提取所需的信息。對(duì)于難以解析的網(wǎng)頁(yè),可以使用一些開(kāi)源的HTML解析包來(lái)處理。Linux環(huán)境下的HTML解析包有BeautifulSoup、lxml等。
3. 存儲(chǔ)數(shù)據(jù)
網(wǎng)頁(yè)抓取完成后,需要將抓取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。常用的數(shù)據(jù)庫(kù)系統(tǒng)有MySQL、PostgreSQL等。
三、使用scrapy實(shí)現(xiàn)網(wǎng)頁(yè)抓取
為了更方便地進(jìn)行網(wǎng)頁(yè)抓取,可以使用Python開(kāi)源的web爬蟲(chóng)框架scrapy。以下是使用scrapy實(shí)現(xiàn)網(wǎng)頁(yè)抓取的步驟:
1. 創(chuàng)建項(xiàng)目
使用如下命令創(chuàng)建一個(gè)名為myproject的scrapy項(xiàng)目:
scrapy startproject myproject
2. 創(chuàng)建spider
Spider是scrapy的核心組件之一,它定義了如何抓取和解析數(shù)據(jù)。使用如下命令創(chuàng)建一個(gè)名為myspider的spider:
scrapy genspider myspider http://www.example.com
其中,http://www.example.com是目標(biāo)網(wǎng)站的地址。
3. 定義Item
Item是用來(lái)存儲(chǔ)抓取到的數(shù)據(jù)的容器。定義Item的方式如下:
import scrapy
class MyprojectItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
desc = scrapy.Field()
其中,title、link和desc是需要抓取的三個(gè)字段。
4. 編寫(xiě)Spider
Spider的作用是根據(jù)設(shè)定的規(guī)則,從指定的URL開(kāi)始抓取數(shù)據(jù)。以下是一個(gè)簡(jiǎn)單的Spider示例:
import scrapy
from myproject.items import MyprojectItem
class MyspiderSpider(scrapy.Spider):
name = ‘myspider’
allowed_domns = [‘example.com’]
start_urls = [‘http://www.example.com’]
def parse(self, response):
for sel in response.xpath(‘//ul/li’):
item = MyprojectItem()
item[‘title’] = sel.xpath(‘a(chǎn)/text()’).extract_first()
item[‘link’] = sel.xpath(‘a(chǎn)/@href’).extract_first()
item[‘desc’] = sel.xpath(‘text()’).extract_first()
yield item
其中,allowed_domns是指定的域名,start_urls是起始的URL。
5. 運(yùn)行Spider
使用如下命令啟動(dòng)Spider:
scrapy crawl myspider
Spider運(yùn)行后,抓取到的數(shù)據(jù)將存儲(chǔ)在Item Pipeline中。
四、
網(wǎng)頁(yè)抓取技術(shù)在數(shù)據(jù)收集和整理方面具有重要的作用。Linux系統(tǒng)下有許多開(kāi)源的工具和框架可供選擇,如wget、curl、scrapy等。使用scrapy框架可以更方便地進(jìn)行網(wǎng)頁(yè)抓取,并將抓取到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。在使用網(wǎng)頁(yè)抓取技術(shù)時(shí),需要注意合法使用、遵守法律法規(guī)和相關(guān)規(guī)定,不得用于非法用途。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專(zhuān)注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線(xiàn):028-86922220linux環(huán)境下python怎樣操作mysql數(shù)據(jù)庫(kù)
linux環(huán)境下python怎樣操作mysql數(shù)據(jù)庫(kù)呢?方法如下:
首先在Linux環(huán)境下安裝mysql-python
1、下載mysql-python
打開(kāi)終端:
cd /usr/local
sudo wget
官網(wǎng)地址:
2、解壓
sudo tar -zxvf MySQL-python-1.2.2.tar.gz
cd MySQL-python-1.2.2
3、在安仔冊(cè)裝前需進(jìn)行配置
a、修改setup_posix.py中的mysql_config.path為你mysql安裝目錄的mysql_config路徑
b、修改site.cfg中的threadsafe = False,去掉mysql_config前的注釋?zhuān)⒏臑閙ysql_config = /usr/local/mysql/bin/mysql_config
c、執(zhí)行命令:
export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql
sudo ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so.14
sudo ldconfig (這個(gè)很重要,否則后面會(huì)報(bào)錯(cuò)ImportError: libmysqlclient.so.14: cannot open shared object file)
4、編譯安裝
1)python setup.py build
若未成功的話(huà),需手動(dòng)安裝setuptools:
sudo apt-get install python-setuptools
2)sudo python setup.py install
5、測(cè)試
python
>>> import MySQLdb
沒(méi)有錯(cuò)誤,則表示安裝成功了。
使用python操作MySQL
使用python連接MySQL,創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表格,插入/查詢(xún)數(shù)據(jù)。python_mysql.py代碼如下:
效果如圖:
若出現(xiàn)類(lèi)似于此的警告:
/usr/local/lib/python2.6/dist-packages/MySQL_python-1.2.2-py2.6-linux-i686.egg/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated from sets import ImmutableSet
解決辦法如下:
找到上面路徑MySQLdb下的__init__.py文件
1) 在文件中 “__init__.py”中, 注釋掉:
from sets import ImmutableSet
class DBAPISet(ImmutableSet):
新增:
class DBAPISet(frozenset):
2) 在文件”converters.py”中,注釋掉 from sets import BaseSet, Set 這一句話(huà)。
3) 在文件”converters.py”中, 修改 其中的”Set” 成為念稿宏 “set” ( 只有兩個(gè)地敬高方需要修改,即大寫(xiě)改小寫(xiě))
大概 line 45: return Set() 改為 return set()
大概 line 129: Set: Set2Str, 改為 set: Set2Str,
1.引入MySQLdb庫(kù)
import MySQLdb
2.和數(shù)據(jù)庫(kù)建立連接
conn=MySQLdb.connect(host=”localhost”,user=”root”,passwd=”sa”,db=”mytable”,charset=”utf8″)
提供的connect方法用來(lái)和數(shù)據(jù)庫(kù)建立連接,接收數(shù)個(gè)參數(shù),返回連接對(duì)象.
比較常用的參數(shù)包括
host:數(shù)據(jù)庫(kù)主機(jī)名.默認(rèn)是用本地主機(jī).
user:數(shù)據(jù)庫(kù)登陸名.默認(rèn)是當(dāng)前用戶(hù).
passwd:數(shù)據(jù)庫(kù)登陸的秘密.默認(rèn)為空.
db:要使用的數(shù)據(jù)庫(kù)名.沒(méi)有默認(rèn)值.
port:MySQL服務(wù)使用的TCP端口.默認(rèn)是3306.
charset:數(shù)據(jù)庫(kù)編碼.
然后,這個(gè)連接對(duì)象也提供了對(duì)事務(wù)操作的支持,標(biāo)準(zhǔn)的方法
commit() 提交
rollback() 回滾
3.執(zhí)行sql語(yǔ)句和接收返回值
cursor=conn.cursor()
n=cursor.execute(sql,param)
首先,我們用使用連接對(duì)象獲得一個(gè)cursor對(duì)象,接下來(lái),我們會(huì)使用cursor提供的方法來(lái)進(jìn)行工作.這些方法包括兩大類(lèi):1.執(zhí)行命令,2.接收返回值
cursor用來(lái)執(zhí)行命令的方法:
callproc(self, procname, args):用來(lái)執(zhí)行存儲(chǔ)過(guò)程,接收的參數(shù)為存儲(chǔ)過(guò)程名和參數(shù)列表,返回值為受影響的行數(shù)
execute(self, query, args):執(zhí)行單條sql語(yǔ)句,接收的參數(shù)為sql語(yǔ)句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)
executemany(self, query, args):執(zhí)行單條sql語(yǔ)句,但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù),返回值為受影響的行數(shù)
nextset(self):移動(dòng)到下一個(gè)結(jié)果集
cursor用來(lái)接收返回值的方法:
fetchall(self):接收全部的返回結(jié)果行.
fetchmany(self, size=None):接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會(huì)返回cursor.arraysize條數(shù)據(jù).
fetchone(self):返回一條結(jié)果行.
scroll(self, value, mode=’relative’):移動(dòng)指針到某一行.如果mode=’relative’,則表示從當(dāng)前所在行移動(dòng)value條,如果mode=’absolute’,則表示從結(jié)果集的之一行移動(dòng)value條.
下面的代碼是一個(gè)完整的例子.
#使用sql語(yǔ)句,這里要接收的參數(shù)都用%s占位符.要注意的是,無(wú)論你要插入的數(shù)據(jù)是什么類(lèi)型,占位符永遠(yuǎn)都要用%s
sql=”insert into cdinfo values(%s,%s,%s,%s,%s)”
#param應(yīng)該為tuple或者list
param=(title,singer,imgurl,url,alpha)
#執(zhí)行,如果成功,n的值為1
n=cursor.execute(sql,param)
#再來(lái)執(zhí)行一個(gè)查詢(xún)的操作
cursor.execute(“select * from cdinfo”)
#我們使用了fetchall這個(gè)方法.這樣,cds里保存的將會(huì)是查詢(xún)返回的全部結(jié)果.每條結(jié)果都是一個(gè)tuple類(lèi)型的數(shù)據(jù),這些tuple組成了一個(gè)tuple
cds=cursor.fetchall()
#因?yàn)槭莟uple,所以可以這樣使用結(jié)果集
print cds
#或者直接顯示出來(lái),看看結(jié)果集的真實(shí)樣子
print cds
#如果需要批量的插入數(shù)據(jù),就這樣做
sql=”insert into cdinfo values(0,%s,%s,%s,%s,%s)”
#每個(gè)值的為一個(gè)tuple,整個(gè)參數(shù)集組成一個(gè)tuple,或者list
param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))
#使用executemany方法來(lái)批量的插入數(shù)據(jù).這真是一個(gè)很酷的方法!
n=cursor.executemany(sql,param)
4.關(guān)閉數(shù)據(jù)庫(kù)連接
需要分別的關(guān)閉指針對(duì)象和連接對(duì)象.他們有名字相同的方法
cursor.close()
conn.close()
以上方法就可以了。
另外,附MySQLdb的相關(guān)資料
更多關(guān)于MySQLdb的信息可以查這里:
mysqldb
使用PHP的cURL庫(kù)進(jìn)行網(wǎng)頁(yè)抓取
使用模明仿PHP的cURL庫(kù)可以簡(jiǎn)單和有效地去抓網(wǎng)頁(yè) 你只需要運(yùn)行一個(gè)腳本 然后分析一下你所抓取的網(wǎng)頁(yè) 然后就可以以程序的方式得到你想要的數(shù)據(jù)了 無(wú)論是你想從從一個(gè)鏈接上取部分?jǐn)?shù)據(jù) 或是取一個(gè)XML文件并把其導(dǎo)入數(shù)據(jù)庫(kù) 那怕就是簡(jiǎn)單的獲取網(wǎng)頁(yè)內(nèi)容 cURL 是一個(gè)功能強(qiáng)大的PHP庫(kù) 本文主要講述如果使用這個(gè)PHP庫(kù)
啟用 cURL 設(shè)置
首先 我們得先要確定我們的PHP是否開(kāi)啟了這個(gè)庫(kù) 你可以通過(guò)使用php_info()函數(shù)來(lái)得到這一信息
﹤?phpphpinfo();?﹥
如果你可以在網(wǎng)頁(yè)上看到下面的輸出 那么表示cURL庫(kù)已被開(kāi)啟
如果你看到的話(huà) 那么你需要設(shè)置你的PHP并開(kāi)啟這個(gè)庫(kù) 如果你是在Windows平臺(tái)下 那么非常簡(jiǎn)單 你需要改一改你的php ini文件的設(shè)置 找到php_curl dll 并取消前面的分號(hào)注釋就行了 如下所示
//取消下在的注釋extension=php_curl dll
如果你旦纖是在Linux下面 那么 你需要重新編譯你的PHP了 編輯時(shí) 你需要打開(kāi)編譯參數(shù)——在configure命令上加上 –with curl 參數(shù)
一個(gè)小示例
如果一切就緒 下面是一個(gè)小例程
﹤?php// 初始化一個(gè) cURL 對(duì)象$curl = curl_init();
// 設(shè)置你需要抓取的URLcurl_setopt($curl CURLOPT_URL //cocre );
// 設(shè)置headercurl_setopt($curl CURLOPT_HEADER );
// 設(shè)置cURL 參數(shù) 要求結(jié)果保存到字符串中還是輸出到屏幕上槐鏈 curl_setopt($curl CURLOPT_RETURNTRANSFER );
// 運(yùn)行cURL 請(qǐng)求網(wǎng)頁(yè)$data = curl_exec($curl);
// 關(guān)閉URL請(qǐng)求curl_close($curl);
// 顯示獲得的數(shù)據(jù)var_dump($data);
如何POST數(shù)據(jù)
上面是抓取網(wǎng)頁(yè)的代碼 下面則是向某個(gè)網(wǎng)頁(yè)P(yáng)OST數(shù)據(jù) 假設(shè)我們有一個(gè)處理表單的網(wǎng)址// example /sendS php 其可以接受兩個(gè)表單域 一個(gè)是號(hào)碼 一個(gè)是短信內(nèi)容
﹤?php$phoneNumber =;$message = This message was generated by curl and php ;$curlPost = pNUMBER=urlencode($phoneNumber) &MESSAGE=urlencode($message) &SUBMIT=Send ;$ch = curl_init();curl_setopt($ch CURLOPT_URL // example /sendS php );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_POST );curl_setopt($ch CURLOPT_POSTFIELDS $curlPost);$data = curl_exec();curl_close($ch);?﹥
從上面的程序我們可以看到 使用CURLOPT_POST設(shè)置HTTP協(xié)議的POST方法 而不是GET方法 然后以CURLOPT_POSTFIELDS設(shè)置POST的數(shù)據(jù)
關(guān)于代理服務(wù)器
下面是一個(gè)如何使用代理服務(wù)器的示例 請(qǐng)注意其中高亮的代碼 代碼很簡(jiǎn)單 我就不用多說(shuō)了
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_HEADER );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPPROXYTUNNEL );curl_setopt($ch CURLOPT_PROXY fakeproxy :);curl_setopt($ch CURLOPT_PROXYUSERPWD user:password );$data = curl_exec();curl_close($ch);?﹥
關(guān)于SSL和Cookie
關(guān)于SSL也就是HTTPS協(xié)議 你只需要把CURLOPT_URL連接中的//變成//就可以了 當(dāng)然 還有一個(gè)參數(shù)叫CURLOPT_SSL_VERIFYHOST可以設(shè)置為驗(yàn)證站點(diǎn)
關(guān)于Cookie 你需要了解下面三個(gè)參數(shù)
CURLOPT_COOKIE 在當(dāng)面的會(huì)話(huà)中設(shè)置一個(gè)cookie
CURLOPT_COOKIEJAR 當(dāng)會(huì)話(huà)結(jié)束的時(shí)候保存一個(gè)Cookie
CURLOPT_COOKIEFILE Cookie的文件
HTTP服務(wù)器認(rèn)證
最后 我們來(lái)看一看HTTP服務(wù)器認(rèn)證的情況
﹤?php $ch = curl_init();curl_setopt($ch CURLOPT_URL // example );curl_setopt($ch CURLOPT_RETURNTRANSFER );curl_setopt($ch CURLOPT_HTTPAUTH CURLAUTH_BASIC);curl_setopt(CURLOPT_USERPWD : )
$data = curl_exec();curl_close($ch);?﹥
linux下mysql 怎么查詢(xún)數(shù)據(jù)庫(kù)
mysql -u root -p
1:在終端下:mysql -V。 以下是代碼此沒(méi)笑片段:
$ mysql -V
2:在mysql中:mysql>察罩 status;
以下是代碼森含片段:
關(guān)于linux抓取網(wǎng)頁(yè)數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技公司主營(yíng):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)等業(yè)務(wù),是專(zhuān)業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫(huà)冊(cè)、網(wǎng)頁(yè)、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開(kāi)發(fā)于一體。
文章題目:Linux利用爬蟲(chóng)技術(shù)實(shí)現(xiàn)網(wǎng)頁(yè)數(shù)據(jù)庫(kù)的抓取(linux抓取網(wǎng)頁(yè)數(shù)據(jù)庫(kù))
網(wǎng)站地址:http://www.5511xx.com/article/cohcjdg.html


咨詢(xún)
建站咨詢(xún)
