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,可以愉快的玩耍了