什麼是爬蟲:
是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。
採用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 ...
十大經典排序
每一次比較完就要立即交換 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。比較完所有...
佛家十大經典
佛家十大經典 經典一 一切皆為虛幻。經典二 不可說。有些話是不能說出來的。一旦失口,往往一絲脆弱的牽伴都會斷掉,縱然痛惜也 經典三 色即是空,空即是色。經典四 人生在世如身處荊棘之中,心不動,人不妄動,不動則不傷 如心動則人妄動,傷其身痛其骨,於是體會到世間諸般痛苦。經典五 一花一世界,一佛一如來。...