Python 话说是一门面向监狱编程的语言,吾等不信,前来尝试。。。。
开玩笑了~
前一段时间刚接触 Python 的时候,觉得有些不适应,特别是语法显得别扭,后来发现它和golang还是挺像的
同样的包管理调用机制:
python:
同样也是包管理机制: import requests
yum install pip
pip install xxxx
友好一点直接上代码:代码中自带解析
值得一提的是Python的json数组处理真不方便 代码中有处理
import requests //是不是和 go使用 的import 引用包一样一样的
import datetime
import json
import sys
from bs4 import BeautifulSoup //爬虫最常用的包
def excuteSpider(url,headers,session,): //封装的函数方式 别扭,特别是以对齐方式的语法
req = session.get(url, headers=headers)
bsObj = BeautifulSoup(req.text, 'html.parser')
rankList = bsObj.findAll("div", {"class": "rank-index"})
linkList = bsObj.findAll("span", {"class": "domain-link"})
lranksub=[]
llinksub=[]
for rank in rankList:
lranksub.append(rank.string.encode('utf-8').decode())
for link in linkList:
llinksub.append(link.a['href'].encode('utf-8').decode())
return lranksub,llinksub
if __name__=='__main__': //主函数
lrank=[]
llink=[]
session = requests.Session()
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0",
"Accept": "*/*"} //构建头部 可以填更多的参数 模拟浏览器访问网址
for i in range(1,2): //想要多少页?
if i==1:
url = "http://www.alexa.cn/siterank/"
else:
url = "http://www.alexa.cn/siterank/"+str(i) //下一页
lranksub,llinksub=excuteSpider(url, headers, session)
lrank+=lranksub
llink+=llinksub
jsontext = {"version":"1.0.0","domains":[]} //创建 json数据
for i in range(len(lrank)):
jsontext["domains"].append({"id":lrank[i], "domain":llink[i]}) //追加
cur_dir = sys.path[0] //获取当前路径
work_dir = cur_dir + '/../db/alexa-cn/' //到上一级路径 /../
now = datetime.datetime.now()
name = datetime.datetime.strftime(now,'%Y%m%d%H%M%S.json') //时间格式化
chinazfilepath = work_dir+name
wf = open(chinazfilepath, 'w')
wf.write(json.dumps(jsontext,indent=4,ensure_ascii=False)) //jso格式化输入文件
wf.close()
print('ok')
爬取结果: