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

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


咨詢
建站咨詢
