python爬虫网站简单_Python爬虫之简单爬虫框架实现
简单爬虫框架实现
目录
框架流程
调度器
url管理器
网页下载器
网页解析器
数据处理器
具体演示效果
框架流程
调度器
#导入模块
import Url_Manager
import parser_html
import html_output
import download
class SpiderMain(object):
def __init__(self):
#实例化:url管理器,网页下载器,网页解析器,数据输出
self.urls=Url_Manager.UrlManager()
self.parser=parser_html.Htmlparser()
self.download = download.download()
self.outputer=html_output.HtmlOutputer()
def craw(self,root_url):
count=1
#向列表里面添加新的单个url
self.urls.add_new_url(root_url)
#判断待爬取的url列表里面有没有新的url
while self.urls.has_new_url():
try:
#如果待爬取的url列表不为空,则取一个url出来
new_url=self.urls.get_new_url()
print('craw %d:%s' % (count,new_url))
#下载网页
html_cont=self.download.download(new_url)
#解析网页
#解析获得两个数据:新的url,以及我们要获取的数据
new_urls,new_data=self.parser.parse(new_url,html_cont)
#获取的url添加到待爬取的url列表
self.urls.add_new_urls(new_urls)
#保存数据
self.outputer.collect_data(new_data)
#如果下载的url页面达到50个,结束当前循环
if count ==50:
break
count=count+1
except:
print('craw failed')
#输出数据
self.outputer.output_html()
if __name__ == '__main__':
#开始爬取的url
url = "http://www.dili360.com/gallery/"
root_url=url
#实例化
obj_spider=SpiderMain()
obj_spider.craw(root_url)
url管理器
#url管理器需要四个方法:
#add_new_url:向管理器添加单个url
#add_new_url:向管理器添加批量的url
#has_new_url:判断管理器里面是否有新的在爬取的url
#get_new_url:在管理器中获取一个正在爬取的url
#url管理器需要维护两个列表:待爬取的url,已经爬取的url
class UrlManager(object):
def __init__(self):
#待爬取的url列表
self.new_urls=set()
#已经爬取的url列表
self.old_urls=set()
#向管理器添加单个url
def add_new_url(self,url):
#首先判断url是否为空
if url is None:
return
#如果这个url既不在待爬取的url里面也没有在已经爬取的url里面,则说明这是一个新url
if url not in self.new_urls and url not in self.old_urls:
self.new_urls.add(url)
# 向管理器添加批量的url
def add_new_urls(self,urls):
if urls is None or len(urls) ==0:
return
for url in urls:
self.add_new_url(url)
#判断管理器里面是否有新的在爬取的url
def has_new_url(self):
return len(self.new_urls) != 0
# 获取一个正在爬取的url
def get_new_url(self):
new_url = self.new_urls.pop()
self.old_urls.add(new_url)
return new_url
网页下载器
import requests
class download(object):
def download(self,url):
if url is None:
return None
else:
response = requests.get(url)
if response.status_code !=200:
return None
return response.text
网页解析器
from urllib.parse import urljoin
from bs4 import BeautifulSoup
class Htmlparser(object):
def _get_new_urls(self,page_url,soup):
new_urls = set()
#这里可以加上正则表达式,对url进行过滤
links=soup.find_all('a')
for link in links:
#补全url,添加到列表里面
new_url=link['href']
new_full_url=urljoin(page_url,new_url)
new_urls.add(new_full_url)
return new_urls
def _get_new_data(self,page_url,soup):
#解析数据,由用户来编写
new_datas=set()
imgs=soup.find_all('img')
for img in imgs:
new_data=img['src']
new_full_data=new_data
new_datas.add(new_full_data)
return new_datas
#需要解析出新的url和数据
def parse(self,page_url,html_cont):
if page_url is None or html_cont is None:
return
soup=BeautifulSoup(html_cont,'html.parser')
#调用两个本地方法:解析新的url以及解析数据
new_urls=self._get_new_urls(page_url,soup)
new_data = self._get_new_data(page_url,soup)
return new_urls,new_data
# 报错:
# UserWarning: You provided Unicode markup but also provided a value for from_encoding. Your from_encoding will be ignored.
# 解决方法:
# soup = BeautifulSoup(html_doc,"html.parser")
# 这一句中删除【from_encoding="utf-8"】
# 原因:
# python3 缺省的编码是unicode, 再在from_encoding设置为utf8, 会被忽视掉,去掉【from_encoding="utf-8"】这一个好了
数据处理器
使用文档保存文本信息
使用文件保存图片,视频文件等,可进行扩展
class HtmlOutputer(object):
def __init__(self):
self.datas=[]
def collect_data(self,data):
if data is None:
return
self.datas.append(data)
def output_html(self):
fout=open('output','a+')
for data in self.datas:
for da in data:
fout.write(str(da)+'\n')
fout.close()
具体演示效果
演示url:http://www.dili360.com/gallery/
演示过程:
数据处理:
python爬虫网站简单_Python爬虫之简单爬虫框架实现相关推荐
- python视频网站项目_Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目...
课程名称: Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目视频教程 课程简介: Flask作为Python编写的Web小型框架,可以使用Python快速开 ...
- python在线翻译代码_Python 20行简单实现有道在线翻译的详解
简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...
- python测试网站功能_Python检测网站链接是否已存在
Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Perl语言一样, Pyt ...
- python实现简单爬虫百度首页_python使用百度进行爬虫简单学习例子
root@kali:~/py# python table.py list: ['http://www.baidu.com/s?wd=python&pn=10&oq=python& ...
- python获取网站代码_python爬虫1——获取网站源代码(豆瓣图书top250信息)
# -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...
- 爬虫python下载网站所有图片_python爬虫(4):多页图片批量下载-澎湃网信息图...
澎湃网文章的质量不错,它的"美数课"栏目的信息图做得也很好.图片干货多还能带来ppt和图表制作的技巧.为了更方便浏览所有文章图片,通过分析Ajax爬取栏目至今所有信息图的图片. 但 ...
- python 爬网站 实例_python爬虫实战:之爬取京东商城实例教程!(含源代码)
前言: 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1 ...
- 爬虫python下载网站所有图片_Python爬虫之下载网页图片
传统的方式是在想要的图片上鼠标点击右键另存为,或者用截图的方式保存图片,其实我们还可以通过使用简单的Python语言实现图片的下载并保存到本地,下面让我们看看如何实现吧 一.确定图片的URL地址及获取 ...
- python怎么爬虫理数据_Python神技能 | 使用爬虫获取汽车之家全车型数据
最近想在工作相关的项目上做技术改进,需要全而准的车型数据,寻寻觅觅而不得,所以就只能自己动手丰衣足食,到网上获(窃)得(取)数据了. 汽车之家是大家公认的数据做的比较好的汽车网站,所以就用它吧.(感谢 ...
- python web游戏实例_python实现的简单文本类游戏实例
Python应用与实践 Python应用与实践 目录 1. Python是什么? 1.1. Python语言 1.2. Python哲学 2. Python在工 ...
最新文章
- Java项目:车租赁管理系统(java+Gui+文档)
- GitHub 上有哪些好用的爬虫?
- 程序员的精力呵护指南!来自十年程序员的精力管理经验
- 新分享一种解决ie6下PNG图片透明的方法
- asp.net core 5.0的一些模块
- 动态规划 —— 背包问题 P02 —— 完全背包
- python bytes是什么类型,python中的字节串类型(bytes)
- python中数字类型与处理工具
- 微服务~Consul服务注册与发现
- 二十三种设计模式[4] - 原型模式(Prototype Pattern)
- Cocos2d-x组件的创建与挂载
- Centos升级GLIBC
- 空洞卷积(扩张卷积dilated convolution)
- 2017 EC-Final A Chat Grou
- ClickHouse 函数极简教程
- DeFi之道丨告别朝九晚五,一文了解区块链新组织形式DO
- Pytorch:lr_schedule恢复训练的注意事项
- 和WiFi共享精灵一起成长
- 大数据运维工作(Linux,OGG,链路监控,Hadoop运维等)
- 最新自己怎么建网站零基础教程-李廷学
热门文章
- tomcat 无端口号访问
- (xy)+((x^y)1)求(245, 112)结果是多少
- android touch事件坐标原点,Android – 捏缩放ontouch事件坐标
- 3d激光雷达开发(法向量预测)
- 随想录(形式化验证小结)
- win32开发(创建子窗口)
- catia文本时怎么换行_【二次开发】CATIA二维图 环形文字工具
- 接口里面能有构造器吗?_家用弱电箱里空空如也,装修时应该怎么在里面接线呢?能拆掉吗?...
- 安装两个mysql3308_在同一台机器上安装两个版本的MySQL
- pv原语模拟实现_HART协议压力变送器硬件设计及实现