1、学python,从简单的爬虫开始。
使用了asyncio、tornado、pyppeteer
tornado比较轻量级(大佬这么和我说的)、pyppeteer是国外大佬根据node的puppeteer改写的适用于python的库(可以写js的)
python相关安装
- mac版
-
依靠homebrew
brew install python3
.python3语法和与之之前的不太一样,python3友好一点(反正我是这么想的。。) -
pip3 python3
默认安装了pip3。使用pip3去安装相关库记得先修改本地镜像,不然速度感人。
在根目录
mkdir .pip
cd .pip
touch pip.conf
vim pip.conf
- 输入
使用的是淘宝的python3镜像。 查看文件存在,因为是.pip,所以直接看不到,需要在目录里同时按[global] index-url=http://mirrors.aliyun.com/pypi/simple [install] trusted-host=mirrors.aliyun.com
command
+shift
+>
,就可以看到隐藏文件夹。再按一次,可以取消查看。
-
安装东西就可以
pip3 install xxx
-
2、代码
首先是入口文件 myTest.py
import asyncio
import tornado.ioloop
import tornado.web
import json
# json这个根据个人需要就好,有时候编码导致json中文字乱码,可以用这个改变一下编码
import sys
sys.path.append(sys.path[0]+"/text")
from text.test import test
# 跨文件引用函数或者class,可以使用sys来操作一下
# 我没有__init__.py
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("哦吼,你来了啊~")
class DoSomeThing(tornado.web.RequestHandler):
def get(self):
json_obj={
"code":200,
"message":"你已成功引起python的注意",
"data":asyncio.run(test())
}
# 我test函数用了异步,所以用这个asyncio去获取test函数的return值
self.write(json_obj)
def jsonText(jsonObj):
# json中汉字,由于编码问题,会乱码,所以用以下方法改变json的编码方式。
return json.dumps(jsonObj,ensure_ascii=False)
url_list=[
(r"/",MainHandler),
(r"/something",DoSomeThing)
]
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
test文件
import asyncio
from pyppeteer import launch
import tornado.ioloop
import tornado.web
async def test():
data = await what()
return data
async def what():
browser = await launch(handleSIGINT=False,handleSIGTERM=False,handleSIGHUP=False) # headless = False,默认ture,为无头模式
# 打开pyppeteer内置的浏览器先
page = await browser.newPage()
#然后打开当当的推荐页面
await page.goto('http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1')
#开始爬
result = await page.evaluate('''() => {
const list = [...document.querySelectorAll('.bang_list > li')];
const data = list.map(item=>{
const obj={
list_num:item.querySelector('.list_num').innerText,
name:item.querySelector('.name a').innerText,
}
return obj
})
return data
}''')
#pyppeteer 可以写js!!!!
#记得加那几个小引号。
#我只是爬了一下第一页的dom取其中的两个值,作为接口数据返回。
#如果需要写入excel或者txt可以使用其他库来进行骚操作。
obj={
"result":result
}
return obj
#值取到了,就让内置浏览器休息吧。
await browser.close()
- 然后
python3 myTest.py
- 打开postman
localhost:8888/something
点击send。就可以看到返回值了。
笔记暂时就这多,未完待续。。。