直接上代码,都是很简单的一些demo,爬取的网站,都没有什么加密措施,所以应该不涉及违法数据,哈哈

1.爬取网页数据(aiohttp+sanic+scrapy+xpath解析html)

from sanic import Sanic
import aiohttp # 导入aiohttp
from sanic.response import text
from scrapy import Selector # 导入html解析模块 app = Sanic(__name__) headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"} async def getsource(url):
conn = aiohttp.TCPConnector(verify_ssl=False) # 防止ssl报错
async with aiohttp.ClientSession(connector=conn) as session: # 创建session
async with session.get(url, headers=headers, timeout=0) as req: # 获得请求
if req.status == 200: # 判断请求码
source = await req.text() # 使用await关键字获取返回结果 print('爬取的文章')
sel = Selector(text=source)
l = []
a = sel.xpath('//ol[@class="breadcrumb"]/li[@class="active"]/text()').extract_first()
b = sel.xpath('//ul[@class="nav nav-tabs"]/li[@class="active"]/a/text()').extract_first()
c = sel.xpath('//span[@class="course-view"]/text()').extract_first()
l.append((a, b, c))
print(l)
else:
print("访问失败") @app.route('/')
async def sanic_hello(request):
myloop = request.app.loop # 创建事件循环
# == event_loop = asyncio.get_event_loop()
for i in range(1, 10):
url = "https://edu.hellobi.com/course/{}"
try:
myloop.create_task(getsource(url.format(i))) # 添加任务到事件循环
except Exception as e:
pass
return text('爬取成功') if __name__ == "__main__":
#用gunicorn部署命令
# gunicorn api_pachong:app --bind 0.0.0.0:8090 --workers=4 --worker-class sanic.worker.GunicornWorker
app.run(host='127.0.0.1', port=8090, workers=8) #""
爬取的文章
[('微软 BI 实战入门系列【持续更新中】', '课程概览', '1742 人学习')]
爬取的文章
[('MS SQL数据库入门及初级BI教程', '课程概览', '1667 人学习')]
爬取的文章
[('IBM Cognos 中级视频教程 【模型和报表教程】', '课程概览', '1227 人学习')]
爬取的文章
[('咖啡姐 BIEE 11G 精品入门视频教程【新手必看】', '课程概览', '2626 人学习')]
爬取的文章
[('BI基础知识漫谈【献给所以热爱商业智能的朋友】', '课程概览', '2398 人学习')]
爬取的文章
[('数据仓库精品教程【特点,数据仓库和ETL设计思想、架构(自上而下、自下而上)、常用概念】', '课程概览', '3856 人学习')]
爬取的文章
[('IBM Cognos 初级教程 【入门必学】', '课程概览', '2520 人学习')]
爬取的文章
[('Oracle BIEE 提高视频教程【时间序列函数,多表头制作,数据同步】', '课程概览', '1151 人学习')]
爬取的文章
[('微软商业智能实战入门及提高视频教程', '课程概览', '249 人学习')]
"""

翻页爬去简单网页

2.爬取网页图片,并下载到本地aiohttp+sanic+BeautifulSoup解析html

import aiohttp
import requests
from sanic import Sanic
from bs4 import BeautifulSoup
from sanic.response import text app = Sanic(__name__) @app.route('/')
async def pars(request):
async with aiohttp.ClientSession() as set:
count = 0
url = 'http://www.moko.cc/channels/post/151/{}.html'
for i in range(1, 2):
try:
async with set.get(url.format(i))as respon: # 异步发送请求
res = await respon.read()
soup = BeautifulSoup(res, 'html.parser') # 解析网页
div_list = soup.find_all(name='div', attrs={'class': "cover"}) # 找到div标签所属的所有标签
for div in div_list: # 循环读取div标签内容
img_l = div.find(name='img') # 找到img标签
src2 = img_l.attrs.get('src2') # 获取src图片链接
if src2:
count += 1
img_path = 'img/' + str(count) + ".jpg" # 拼接图片存储路径以及文件名称
re_img = requests.get(src2) # 下载图片
with open(img_path, 'wb')as f: # 打开图片,存储
f.write(re_img.content) # 获取图片内容
print('完成第{}页'.format(i))
except Exception as e:
print(e)
return text('爬取成功') if __name__ == '__main__':
app.run(host="127.0.0.1", port=8811, workers=8)

翻页爬取网页图片并下载

3.爬取新闻,信息存储到本地txt文件中(aiohttp+sanic+BeautifulSoup解析html)

import aiohttp
from sanic import Sanic
from bs4 import BeautifulSoup
from sanic import response app = Sanic(__name__) async def get_content(url):
async with aiohttp.ClientSession() as session:
# for i in range(1,4):
async with session.get(url) as ret:
res = await ret.text()
# print(url)
# print(res)
soup = BeautifulSoup(res, 'html.parser')
div = soup.find(name="div", attrs={"id": "auto-channel-lazyload-article"})
li_list = div.find_all(name="li")
for li in li_list:
title = li.find(name="h3")
if not title:
continue
p = li.find(name="p")
a = li.find(name="a") # print(title.text)
# print(a.attrs.get("href"))
# print(p.text)
with open('sanic_log.txt', 'a')as f: # 把信息存储到sanic_log文本中
f.write('标题:' + title.text + '\n')
f.write('链接:' + a.attrs.get("href") + '\n')
f.write('文本:' + p.text) @app.route('/index')
async def index(request):
url = 'https://www.autohome.com.cn/news/'
Loop = request.app.loop
Loop.create_task(get_content(url))
return response.text('hello sprider') if __name__ == '__main__':
app.run(host="127.0.0.1", port=8811, workers=8) #"""
标题:10月27日预售 新款瑞虎5x更多信息曝光
链接://www.autohome.com.cn/news/201810/923880.html#pvareaid=102624
文本:[汽车之家 新闻] 日前,我们从官方渠道获悉,新款奇瑞瑞虎5x 1.5L款将在10月27日全面开启预售。作为奇瑞汽车的核心车型,新车除了将搭载1.5...标题:广汽古惠南:未来或推方形/球形的汽车
链接://www.autohome.com.cn/news/201810/923883.html#pvareaid=102624
文本:[汽车之家 新闻] 在10月19日举行的世界智能网联汽车大会上,广汽新能源总经理古惠南分享了他对未来汽车形态上的构想,他表示,未来汽车将不会只有轿车...标题:售19.28万起 长安福特蒙迪欧智控版上市 """

爬取新闻

sanic+aiohttp爬虫demo(爬图片,新闻,数据)的更多相关文章

  1. python爬虫——对爬到的数据进行清洗的一些姿势(5)

    做爬虫,当然就要用数据.想拿数据进行分析,首先清洗数据.这个清洗数据包括清除无用数据列和维度,删除相同数据,对数据进行勘误之类的. 从各大不同新闻网站可以爬到重复新闻...这个可以有.之前为了对爬到的 ...

  2. 学习用java基于webMagic+selenium+phantomjs实现爬虫Demo爬取淘宝搜索页面

    由于业务需要,老大要我研究一下爬虫. 团队的技术栈以java为主,并且我的主语言是Java,研究时间不到一周.基于以上原因固放弃python,选择java为语言来进行开发.等之后有时间再尝试pytho ...

  3. Scrapy爬虫Demo 爬取资讯分类

    爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(sys) sys.se ...

  4. Python3.x爬虫教程:爬网页、爬图片、自己主动登录

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文将使用Python3.4爬网页.爬图片.自己主动登录.并对HTTP协议做了一个简单 ...

  5. 一个月入门Python爬虫,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  6. 第一个nodejs爬虫:爬取豆瓣电影图片

    第一个nodejs爬虫:爬取豆瓣电影图片存入本地: 首先在命令行下 npm install request cheerio express -save; 代码: var http = require( ...

  7. python爬虫——爬取网页数据和解析数据

    1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2 ...

  8. 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式

    爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...

  9. 一起学爬虫——如何爬取通过ajax加载数据的网站

    目前很多网站都使用ajax技术动态加载数据,和常规的网站不一样,数据时动态加载的,如果我们使用常规的方法爬取网页,得到的只是一堆html代码,没有任何的数据. 请看下面的代码: url = 'http ...

随机推荐

  1. 洛谷 P2024 [NOI2001]食物链——带权值的并查集维护

    先上一波题目 https://www.luogu.org/problem/P2024 通过这道题复习了一波并查集,学习了一波带权值操作 首先我们观察到 所有的环都是以A->B->C-> ...

  2. Jmeter脚本如何在Linux通过no GUI的方式运行 命令行传递参数

    本文主要介绍Jmeter脚本如何在Linux通过no GUI的方式运行.总共分三部分: 1.Linux下JDK的安装及环境变量的配置 2.Linux下Jmeter的安装及环境变量的配置 3.运行结果的 ...

  3. vue组件库的基本开发步骤

    市面上目前已有各种各样的UI组件库,比如 Element 和 iView,他们的强大毋庸置疑.但是我们面临的情况是需求越来越复杂,当它们不能再满足我们需求的时候,这个时候就有必要开发一套属于自己团队的 ...

  4. Android开发——回调(Callback)

    1. 回调函数的定义: 在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A ...

  5. Opencv 特征提取与检测-Haar特征

    Haar特征介绍(Haar Like Features) 高类间变异性 低类内变异性 局部强度差 不同尺度 计算效率高 这些所谓的特征不就是一堆堆带条纹的矩形么,到底是干什么用的?我这样给出 ...

  6. MATLAB GUI 设计要点 转

    https://www.cnblogs.com/wangh0802PositiveANDupward/p/4588512.html 从简单的例子说起吧. 创建Matlab GUI界面通常有两种方式: ...

  7. 为何在新建STM工程中全局声明两个宏

    在uVision中新建STM32工程后,需要从STM32标准库中拷贝标准外设驱动到自己的工程目录中,此时需要在工程设置->C/C++选项卡下的Define文本框中键入这两个全局宏定义. STM3 ...

  8. 洛谷P1935 [国家集训队]圈地计划

    题目大意: 有个\(n*m\)的网格图 每个点可以选择\(A\),获得\(A[i][j]\)或选\(B\)获得\(B[i][j]\)的收益 相邻点有\(k\)个不同可以获得\(C[i][j]\)的收益 ...

  9. 【JavaWeb项目】一个众筹网站的开发(八)后台页面详细设置

    一.user.jsp改造 删除引入菜单 抽取导航栏 nav-bar.jsp,删除引入导航栏 删除引入main.jsp的到好烂 数据库里添加url 报错,url不对 没有/ url正确 action=& ...

  10. 【leetcode】966. Vowel Spellchecker

    题目如下: Given a wordlist, we want to implement a spellchecker that converts a query word into a correc ...