Ⅰ 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中,分别对文件夹或文件进行过滤即可。