Python3用不了builtwith库?
目录
更多分享:http://www.catbro.cn
一、前言:
- BuiltWith是一个网站技术信息查询工具,开发团队来自于澳大利亚。利用该网站所提供的功能,你可以查询出某网站背后是由哪些技术来支持的,比如操作系统的类型、所采用的访问量统计服务、采用的发布平台、广告平台、语言框架、聚合功能、页面文档信息、网站编码及操作系统信息等等。可帮助更深一层次了解该网站的运营情况。
- BuiltWith:网站查询工具的操作方法很简单,只需输入想要查询的网站地址,就可实时提供相应的数据,如果你是位对于架设网站有着浓厚兴趣的朋友的话,不妨试试这款工具,也许对于你在创建自已的网站时有所帮助。
二、BuiltWith的使用
-
如果你的开发环境是
Pyhton2
,那么你仅需要执行pip install builtwith
后,即可在代码中正常调用import builtwith print(builtwith.parse('http://example.webscraping.com'))
-
其会返回该站点所使用的技术支持
{'web-servers': ['Nginx'], 'web-frameworks': ['Web2py', 'Twitter Bootstrap'], 'programming-languages': ['Python'], 'javascript-frameworks': ['jQuery', 'Modernizr', 'jQuery UI']}
-
如果你的开发环境是Python3时,你会发现,执行报错,
-
1、执行
import builtwith
首先报如下错误File “”m line 1, in File “…\site-packages\builtwith__init__.py”, line43 “Exception, e”
-
因为
Exception, e
是Python2
的写法,我们的环境是Python3
,所以我们将其改为Exception as e
即可 -
2、
Python2
中的print
语句在Python3
中需要写成print()
,按照错误提示修改对应行数即可。 -
3、
builtwith
中使用的是Python2
中的urllib2
工具包,这个工具包在Python3
中是不存在的,替换import urllib2
为如下代码import urllib.request import urllib.error
-
以及使用的urllib2的代码修改为:
request = urllib.request.Request(url, None, {'User-Agent': user_agent}) response = urllib.request.urlopen(request)
-
Ok,那我们可以再次运行项目了吧?好开心,又可以愉快的玩耍了
-
No,又报错了
return re.compile(regex.split('\\;')[0], flags=re.IGNORECASE).search(v) TypeError: cannot use a string pattern on a bytes-like object
-
因为urllib返回的数据格式已经发生了改变,我们需要做一下转码
if html is None: html = response.read() 修改后 if html is None: html = response.read() html = html.decode('utf-8')
-
但是,这还不够完美,万一站点不是
utf-8
呢? -
我们可以这么做,如果再获得
html
的时候,我们知道它的编码,后面动态的转码不就可以了么? -
我们通过安装一个叫chardet的工具包,进行解析站点的编码
-
首先通过
pip3
安装pip3 install chardet
,然后在头部导入import chardet
后代码修改如下if html is None: html = response.read() encode_type = chardet.detect(html) if encode_type['encoding'] == 'utf-8': html = html.decode('utf-8') else: html = html.decode('gbk')
-
Ok,可以愉快的玩耍了