4大經典爬蟲模組應用操作

2022-04-01 08:57:17 字數 4636 閱讀 9115

什麼是爬蟲:

是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。

採用python作為爬蟲的優點:

大量第三方庫,開發效率高,**少,應用性廣泛

網路爬蟲的基本工作流程如下:

1.首先選取一部分精心挑選的種子url;

2.將這些url放入待抓取url佇列;

4.分析已抓取url佇列中的url,分析其中的其他url,並且將url放入待抓取url佇列,從而進入下乙個迴圈。

urllib模組

介紹:urllib模組提供的上層介面,使我們可以像讀取本地檔案一樣讀取www和ftp上的資料

實戰例子

#coding=utf-8

created on 2023年1月28日

@author: gaojs

import urllib,re,os

def gethtml():

page=urllib.urlopen('').read()#開啟**並且讀取

return page

x=0def getimg(page):

imgre=re.compile(r' src="(.*?)" class=')

imglist=re.findall(imgre,page)

for imgurl in imglist:

#         print imgurl

global x

if not os.path.exists('/users/gaojs/desktop/pic'):

print os.mkdir('/users/gaojs/desktop/pic/')

else:

x+=1

l=gethtml()

getimg(l)

urllib2模組

urllib與urllib2區別

1.在python中,urllib和urllib2不可相互替代的。

2.整體來說,urllib2是urllib的增強,但是urllib中有urllib2中所沒有的函式。

3.urllib2可以用urllib2.openurl中設定request引數,來修改header頭。如果你訪問乙個**,想更改user agent(可以偽裝你的瀏覽器),你就要用urllib2.

4.urllib支援設定編碼的函式,urllib.urlencode,在模擬登陸的時候,經常要post編碼之後的引數,所以要想不使用第三方庫完成模擬登入,你就需要使用urllib。

5.urllib一般和urllib2一起搭配使用。

6.urllib2解決禁止爬蟲,模擬瀏覽器,加上頭部資訊headers

實戰例子

#coding=utf-8

created on 2023年1月19日

@author: gaojunsong

import re,urllib2

class bdtb:

baseurl=""

def getpage(self,pageno):

url=self.baseurl+str(pageno)

request=urllib2.request(url)#構造物件

response=urllib2.urlopen(request).read()

return response

def gettitle(self,pageno):

html=self.getpage(pageno)

reg=re.compile(r'title="【原創】(.*?)"')

items=re.findall(reg,html)

for item in items:

with open('a.txt','w')as tp:

tp.write('標題'+'\t'+'<<'+item+'>>')

i=i.replace('隨意鎮','')

with open('a.txt','a')as tp:

tp.write('\n\n'+i)

return rq

l=bdtb()

for i in range(1,6):

print '正在讀取第%s頁**'%i

l.getpage(i)

l.gettitle(i)

l.getcontent(i)

request模組

實戰例子

對**傳送乙個請求post/get,獲取原始碼text和content

bsp模組

bsp全稱:beautifulsoup(優勢:不需要寫正規表示式)

介紹:beautiful soup提供一些簡單的、python式的函式用來處理導航、搜尋、修改分析樹等功能。它是乙個工具箱,通過解析文件為使用者提供需要抓取的資料,因為簡單,所以不需要多少**就可以寫出乙個完整的應用程式。

beautiful soup自動將輸入文件轉換為unicode編碼,輸出文件轉換為utf-8編碼。你不需要考慮編碼方式,除非文件沒有指定乙個編碼方式,這時,beautiful soup就不能自動識別編碼方式了。然後,你僅僅需要說明一下原始編碼方式就可以了。

beautiful soup已成為和lxml、html6lib一樣出色的python直譯器,為使用者靈活地提供不同的解析策略或強勁的速度。

實戰例子

#例子:如何獲取標籤內容

#encoding=utf-8

from bs4 import beautifulsoup

html='welcome to gloryroad

join gloryroad soon<\div>'

soup=beautifulsoup(html,'html.parser')#解析方式

print soup.div

print soup.title

#如何開啟檔案獲取內容

新建html檔案,寫入內容『歡迎同學加入光榮之路測試開發班級,跟吳老一起學習』

#encoding=utf-8

from bs4 import beautifulsoup

soup=beautifulsoup(open('a.html'),'html.parser')#解析方式

print soup.prettify()#列印本地檔案內容,格式化列印內容

urllib urllib2 bsp綜合案例

實戰例子

#encoding=utf-8

爬取豆瓣網,美臀,並且存在指定目錄下

用到的知識點,urllib,urllib2,bsp,shutil,os

import urllib,urllib2,os

from bs4 import beautifulsoup

import sys

from pip.index import link

import shutil

reload(sys)

sys.setdefaultencoding('utf-8')#輸出的內容為utf-8格式

x=0判斷目錄是否存在,如果不存在則建立

if not os.path.exists('/users/gaojs/desktop/pigu'):

os.mkdir('/users/gaojs/desktop/pigu/')

else:

shutil.rmtree('/users/gaojs/desktop/pigu/')#shutil比os好在於可以刪除不為空的目錄

os.mkdir('/users/gaojs/desktop/pigu/')

def spider(url):

req=urllib2.request(url,headers=headers)

page=urllib2.urlopen(req,timeout=20).read()

soup=beautifulsoup(page,'html.parser')#解析方式parser

my_girl=soup.find_all('img')

for girl in my_girl:

link=girl.get('src')

#         print link

global x

x+=1

for page in xrange(1,3):

page+=0

url=''%page

print '第'+str(page)+'頁'

spider(url)

spider(url)

三大經典表連線

nested loop join 區域性掃瞄的oltp 驅動結果集的條數決定被驅動表的訪問次數 效能與驅動表順序有關 無特殊寫法限制 驅動表 被驅動表限制條件建立索引 小結果集驅動大結果集 hash join olap全表掃瞄 兩表只會訪問1次或0次 效能與驅動表順序有關 不能用於 between ...

十大經典排序

每一次比較完就要立即交換 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。比較完所有...

佛家十大經典

佛家十大經典 經典一 一切皆為虛幻。經典二 不可說。有些話是不能說出來的。一旦失口,往往一絲脆弱的牽伴都會斷掉,縱然痛惜也 經典三 色即是空,空即是色。經典四 人生在世如身處荊棘之中,心不動,人不妄動,不動則不傷 如心動則人妄動,傷其身痛其骨,於是體會到世間諸般痛苦。經典五 一花一世界,一佛一如來。...