Ⅰ Python有哪些常見的,好用的爬蟲框架
由於項目需求收集並使用過一些爬蟲相關庫,做過一些對比分析。以下是我接觸過的一些庫:
Beautiful Soup。名氣大,整合了一些常用爬蟲需求。缺點:不能載入JS。
Scrapy。看起來很強大的爬蟲框架,可以滿足簡單的頁面爬取(比如可以明確獲知url pattern的情況)。用這個框架可以輕松爬下來如亞馬遜商品信息之類的數據。但是對於稍微復雜一點的頁面,如weibo的頁面信息,這個框架就滿足不了需求了。
mechanize。優點:可以載入JS。缺點:文檔嚴重缺失。不過通過官方的example以及人肉嘗試的方法,還是勉強能用的。
selenium。這是一個調用瀏覽器的driver,通過這個庫你可以直接調用瀏覽器完成某些操作,比如輸入驗證碼。
cola。一個分布式爬蟲框架。項目整體設計有點糟,模塊間耦合度較高,不過值得借鑒。
以下是我的一些實踐經驗:
對於簡單的需求,比如有固定pattern的信息,怎麼搞都是可以的。
對於較為復雜的需求,比如爬取動態頁面、涉及狀態轉換、涉及反爬蟲機制、涉及高並發,這種情況下是很難找到一個契合需求的庫的,很多東西只能自己寫。
至於題主提到的:
還有,採用現有的Python爬蟲框架,相比與直接使用內置庫,優勢在哪?因為Python本身寫爬蟲已經很簡單了。
third party library可以做到built-in library做不到或者做起來很困難的事情,僅此而已。還有就是,爬蟲簡不簡單,完全取決於需求,跟Python是沒什麼關系的。
Ⅱ python filter過濾器疑問
map是把函數調用抄的結果放在列表裡面返回,它也可以接受多個 iterable,在第n次調用function時,將使用iterable1[n], iterable2[n], ...作為參數。
filter(function, iterable)
這個函數的功能是過濾出iterable中所有以元素自身作為參數調用function時返回True或bool(返回值)為True的元素並以列表返回.
def f_large_than_5(x):
return x > 5
filter(f_large_than_5, range(10))
>>[6,7,8,9]
Ⅲ 如何用python寫布隆過濾器
下面的是網路上找到的python的布隆過濾器的實現.
#!/usr/local/bin/python2.7
#coding=gbk
'''
Createdon2012-11-7
@author:palydawn
'''
importcmath
fromBitVectorimportBitVector
classBloomFilter(object):
def__init__(self,error_rate,elementNum):
#計算所需要的bit數
self.bit_num=-1*elementNum*cmath.log(error_rate)/(cmath.log(2.0)*cmath.log(2.0))
#四位元組對齊
self.bit_num=self.align_4byte(self.bit_num.real)
#分配內存
self.bit_array=BitVector(size=self.bit_num)
#計算hash函數個數
self.hash_num=cmath.log(2)*self.bit_num/elementNum
self.hash_num=self.hash_num.real
#向上取整
self.hash_num=int(self.hash_num)+1
#產生hash函數種子
self.hash_seeds=self.generate_hashseeds(self.hash_num)
definsert_element(self,element):
forseedinself.hash_seeds:
hash_val=self.hash_element(element,seed)
#取絕對值
hash_val=abs(hash_val)
#取模,防越界
hash_val=hash_val%self.bit_num
#設置相應的比特位
self.bit_array[hash_val]=1
#檢查元素是否存在,存在返回true,否則返回false
defis_element_exist(self,element):
forseedinself.hash_seeds:
hash_val=self.hash_element(element,seed)
#取絕對值
hash_val=abs(hash_val)
#取模,防越界
hash_val=hash_val%self.bit_num
#查看值
ifself.bit_array[hash_val]==0:
returnFalse
returnTrue
#內存對齊
defalign_4byte(self,bit_num):
num=int(bit_num/32)
num=32*(num+1)
returnnum
#產生hash函數種子,hash_num個素數
defgenerate_hashseeds(self,hash_num):
count=0
#連續兩個種子的最小差值
gap=50
#初始化hash種子為0
hash_seeds=[]
forindexinxrange(hash_num):
hash_seeds.append(0)
forindexinxrange(10,10000):
max_num=int(cmath.sqrt(1.0*index).real)
flag=1
fornuminxrange(2,max_num):
ifindex%num==0:
flag=0
break
ifflag==1:
#連續兩個hash種子的差值要大才行
ifcount>0and(index-hash_seeds[count-1])<gap:
continue
hash_seeds[count]=index
count=count+1
ifcount==hash_num:
break
returnhash_seeds
defhash_element(self,element,seed):
hash_val=1
forchinstr(element):
chval=ord(ch)
hash_val=hash_val*seed+chval
returnhash_val
'''
#測試代碼
bf=BloomFilter(0.001,1000000)
element='palydawn'
bf.insert_element(element)
printbf.is_element_exist('palydawn')'''
#其中使用了BitVector庫,python本身的二進制操作看起來很麻煩,這個就簡單多了
如果解決了您的問題請採納!
如果未解決請繼續追問
Ⅳ python怎麼刪除文件夾以及裡面的所有文件
刪除前:
tree /F ./a
文件夾 PATH 列表
卷序列號為 00000072 E489:5638
C:USERSADMINISTRATORA
└─b
│ ex.txt
│
└─c
ex.txt
刪除命令:
importshutil
shutil.rmtree('./a')
刪除後:
tree /F ./a
文件夾 PATH 列表
卷序列號為 00000072 E489:5638
C:USERSADMINISTRATORA
無效的路徑 - USERSADMINISTRATORA
沒有子文件夾
Ⅳ Python常用的包有什麼
Phthon是一門計算機語言,在近兩年phthon的需求不斷增加,學習的人也越多
Ⅵ 如何判斷一個文件夾里是否有文件,文件夾的路徑知道了
python
返迴文件夾下所有文件,滿足你的需求
os.walk()返回一個三元素的tuple:當前路徑、子文件夾名稱、文件列表。
>>>
import
os
>>>
def
fun(
path
):
...
for
root,
dirs,
files
in
os.walk(
path
):
...
for
fn
in
files:
...
print
root,
fn
Ⅶ 如何使用python過濾器操作系統使用程序 sort 和 more 排序並逐屏輸出數據
reverse()方法
將列表中元素反轉排序,比如下面這樣
>>> x = [1,5,2,3,4]
>>> x.reverse()
>>> x
[4, 3, 2, 5, 1]
reverse列表反轉排序:是把原列表中的元素順序從左至右的重新存放,而不會對列表中的參數進行排序整理。如果需要對列表中的參數進行整理,就需要用到列表的另一種排序方式sort正序排序。
sort()排序方法
此函數方法對列表內容進行正向排序,排序後的新列表會覆蓋原列表(id不變),也就是sort排序方法是直接修改原列表list排序方法。
>>> a = [5,7,6,3,4,1,2]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6, 7]
在玩蛇網許多python初學者,對sort()方法比較糊塗。有的時候會需要一個排序好的列表,而又想保存原有未排序列表,他們會這么操作:
>>> a = [5,7,6,3,4,1,2]
>>> b = a.sort()
>>> print b
None
這個時候問題出現了,變數b得到的是一個空值。那麼想要得到排序好的列表,又想保留原列表怎麼辦呢?列表sorted()方法可以幫你實現。
sorted()方法
即可以保留原列表,又能得到已經排序好的列表sorted()操作方法如下:
>>> a = [5,7,6,3,4,1,2]
>>> b = sorted(a)
>>> a
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
sorted()方法可以用在任何數據類型的序列中,返回的總是一個列表形式:
>>> sorted('iplaypython.com')
['.', 'a', 'c', 'h', 'i', 'l', 'm', 'n', 'o', 'o', 'p', 'p', 't', 'y', 'y']
Ⅷ 如何用python來實現這個功能
防火牆有網路防火牆和病毒防火牆。 網路防火牆不能完全用python做,低層的協議包過濾器需要用C和C++, 然後還要做一個服務,python上層管理程序可以與服務程序做通訊進行低層包的過濾規則設定。這東西都有現成的框架。國產的有,國外的也有。直接拿來用就可以。不用開發。
病毒防火牆也是一樣,需要在文件API上做一個掛勾。當文件讀寫時會觸發通知到你的服務里。 服務程序會檢查相應的文件,通常會先攔截一下,檢查完了再放開。 用python可以做病毒檢查,但是速度太慢,估計載入後會讓操作系統死機。
還有一種是WEB防火牆,需要使用插件。如果是ie插件,就不用說了,這個必須用C,還不容易穩定。不過chrome可以用JS, firefox可以用它自帶的那個語言。也可以用C。用python理論上也可以。價值不太大。
不過可以做一個python的WEB網站,做一個雲計算,病毒數據查詢之類的。
Ⅸ Python能不能做文件粉碎機,把文件或文件夾拖動到這個.py文件上面就自動強力刪除(不進回收站)
回復樓主的追答:
Python 刪除文件很簡單,執行下面兩行代碼就行了:
import os
os.remove("xxx.txt")
Ⅹ 如何用Python過濾顯示文件或者文件夾
123456importosforwroot,wdirs,wfilesinos.walk(os.getcwd()):forwdirinwdirs:chuli1()forwfileinwfiles:chuli2()
在chuli1與chuli2中,分別對文件夾或文件進行過濾即可。