最近的物联网智能网关(树莓派)项目中遇到这样一个问题:要从多个底层串口读取发来的数据,并且做出相应的处理,对于每个串口的数据的读取我能想到的可以采用两种方式: 一种是采用轮询串口的方式,例如每3s向每个串口的buffer区去取一次数据,但是这样可能会有缓冲区溢出的可能,同时,数据的同步也可能会出现一定的问题,因为数据的上传周期是可以用户自定义的,一旦用户定义的上传周期过短或过长,都可能造成读取的数据出问题. 另一种方式,就是采用多线程方式,把每个串口读取数据放在单独的子线程中,每个子线程阻塞于串…
之前用多线程的时候看见了很多文章,比较常用的大概就是join()和setDeamon()了. 先说一下自己对join()的理解吧: def join(self, timeout=None): """Wait until the thread terminates. This blocks the calling thread until the thread whose join() method is called terminates -- either normally…
Tread是threading模块中的重要类之一,可以使用它来创造线程.其具体使用方法是创建一个threading.Tread对象,在它的初始化函数中将需要调用的对象作为初始化参数传入. 具体代码如下: import threading ,time count = 0 #在程序中,每个线程被赋予了一个名字,然后设置没隔0.3秒打印出本线程计数,即加1. # 而count被人为地设置成全局变量,因此在每个线程中都可以自由地对其进行访问 #其中的run方法和start方法并不是threading自带…
Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def sayhi(num): print("running on number:%s" % num) time.sleep(3) if __name__ =='__main__': #生成两个线程实例 t1 = threading.Thread(target=sayhi,args=(1,)…
今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading…
Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.下面分别举例说明.先来看看通过继承threading.Thread类来创建线程的例子: #coding=gbk import threading, time, random count = 0 class Counter(threa…
更新 其实本文的初衷是为了获取淘宝的非匿名旺旺,在淘宝详情页的最下方有相关评论,含有非匿名旺旺号,快一年了淘宝都没有修复这个. 可就在今天,淘宝把所有的账号设置成了匿名显示,SO,获取非匿名旺旺号已经不可能了.那本节就带大家抓取匿名旺旺号熟悉一下Selenium吧. 2016/7/1 前言 嗯,淘宝,它一直是个难搞的家伙. 而且买家在买宝贝的时候大多数都是匿名评论的,大家都知道非匿名评论是非常有用的,比如对于大数据分析,分析某个宝贝的购买用户星级状况等等. 现在已经不能获取非匿名了,此句已没有意…
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取 如何用python实现App数据抓取,从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App端数据抓取项目集成,让你掌握App数据抓取的技能,向更优秀的python爬虫工程师迈进! 第1章 课程介绍 介绍课程目标.通过课程能学习到的内容.学会这些技能能做什么,对公司业务有哪些帮…
[Python] 糗事百科文本数据的抓取 源码 https://github.com/YouXianMing/QiuShiBaiKeText import sqlite3 import time import requests from regexp_string import * class QiuShiBaiKeText35: db_name = 'qiu_shi_bai_ke_text35.db' conn = None def prepare(self): """ 开…
python实现列表页数据的批量抓取,练手的,下回带分页的 #!/usr/bin/env python # coding=utf-8 import requests from bs4 import BeautifulSoup import pymysql import sys, io sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') # Change default encoding to utf8 print('连…
接着上一遍,在用Selenium+phantomjs 抓取数据过程中发现,有时候抓取不到,所以又测试了用Selenium+浏览器驱动的方式:具体代码如下: #coding=utf-8import osimport refrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timefrom selenium.webdriver.common.action_chains import A…
Python爬虫工程师必学APP数据抓取实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以关注下面几点: 1.为了追求精简简洁牺牲了部分实用性,导致不足以达到某些工作的需要2.大部分是实战课程弱化了其他技术点的不足,无法全面了解python,但是很多都是刚接触python的(很致命)3.因为是录播课程导致某些问题不能及时去解决,没人交流(这个最烦) 所以真要把python学…
Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以关注下面几点: 1.为了追求精简简洁牺牲了部分实用性,导致不足以达到某些工作的需要 2.大部分是实战课程弱化了其他技术点的不足,无法全面了解python,但是很多都是刚接触python的(很致命) 3.因为是录播课程导致某些问题不能及时去解决,没人交流(这个最烦)  所以真要把pyth…
主要内容: 一. 锁 二. 信号量 三. 事件 通过event来完成红绿灯模型 四. 队列(重点) 队列实现进程间的通信 五. 生产者消费者模型 1. 初始版本(程序会阻塞住) 2. 升级版本一(通过抛出异常信号的方式结束进程) 3. 升级版本二(通过发送结束信号的方式结束进程) 第一种: 生产者发结束信号 第二种: 主进程发结束信号 4. 升级版本三(有多个消费者和生产者的时候需要发送多次结束信号) 六. JoinableQuene实现生产者消费者模型 一. 进程同步(锁) 在之前muitip…
Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置函数的具体介绍. Python常用模块I中内置模块常用内置函数: help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像函数一样调用 repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝 eval_r(str)…
一.threading模块的对象 Thread:表示一个执行线程的对象 Lock:锁 Rlock:可重入锁对象 Condition:条件变量对象,使得一个线程等待另一个线程满足特定的“条件” Event:条件变量的通用版本,任意数量的线程等待某个时间的发生,在该事件发生后所有线程将被激活 Semphore:为线程间共享有限资源提供一个“计数器” BoundedSemaphore:与Semphore相同,不过它不允许超过初始值 Timer:与Thread相同,不过它要在运行前等待一段时间 Barr…
import os '''使用OS模块中的fork方式实现多进程''' '''fork方法返回两次,分别在父进程和子进程中返回,子进程中永远返回0,父进程返回的是子进程的is''' if __name__=="__main__": print("当前进程(%s)开始执行..."%os.getpid()) pid=os.fork() if pid<0: print("error in fork") elif pid==0: print(&qu…
一.介绍 本例子用Selenium +phantomjs爬取活动行(http://www.huodongxing.com/search?qs=数字&city=全国&pi=1)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 三.数据抓取 针对上面的网站信息,来进行抓取 1.首先抓取信息列表 抓取代码:Elements = doc('ul[class="event-hori…
一.介绍 本例子用Selenium +phantomjs爬取活动树(http://www.huodongshu.com/html/find_search.html?search_keyword=数字)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 三.数据抓取 针对上面的网站信息,来进行抓取 1.首先抓取信息列表 抓取代码:Elements = doc('div[id="eventLi…
思路是这样的,给一系列关键字:互联网电视:智能电视:数字:影音:家庭娱乐:节目:视听:版权:数据等.在活动行网站搜索页(http://www.huodongxing.com/search?city=%E5%85%A8%E5%9B%BD&pi=1)的文本输入框中分别输入每个关键字,在搜索结果中抓取需要的数据. 首先通过Selenium+IE驱动得到每个关键字搜索结果的url(首页,因为以后各个页的url就是索引不一样)和总页数,保存的列表里面.然后再循环列表,用Selenium +phantomj…
跨文件夹导入模块 1:有文件夹a,名下有ma功能,在文件夹外调用ma功能的话, 导入import a.ma 运用ma() 或者 from a import ma ma() 2;假定a有多重文件夹,想要调用多重文件夹下的模块 则是 a.x.y一直点到那个模块名 或者 from a.x.y import 功能名 3:注意点: .左侧必须是文件夹名 模块的两种被执行方式 1:第一种py文件自执行 2:第二种py文件作为模块是被导入执行 当调用py文件时 不想被Py文件自身执行所影响 则在被调用模块的p…
way 1.help() way 2.dir() # dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表: way 3. 使用inspect模块, inspect.getmembers(object [,predicate ] ) 返回 按名称排序的对列表中的对象的所有成员.如果提供了可选的谓词参数(将与每个成员的对象一起调用),则仅包含谓词为其返回真值的成员.(name, value)value 注解:getmembers()仅当参数为类并且这些属性已在metaclass的…
可以直接通过 模块名.变量名=xx 的方式修改模块中的全局变量,测试代码如下 模块:test_model.py x = 111 def inc_x(): global x x = x + 1 测试脚本:test.py import test_model print('test_model.x =', test_model.x) test_model.x = 10 print('test_model.x =', test_model.x) test_model.inc_x() print('tes…
一.使用Fiddler抓取HTTPS设置 (1)菜单栏 Tools > Telerik Fiddler Options 打开“Fiddler Options”对话框 (2)HTTPS设置:选中Capture HTTPS CONNECTs(捕捉HTTPS连接),选中Decrypt HTTPS traffic(解密HTTPS通信),另下拉菜单中选中...from all processess(从所有进程),与lgnore server certificate errors(忽略服务器证书错误) (3…
抓取活动树网站中会议活动数据(http://www.huodongshu.com/html/index.html) 具体的思路是[Python爬虫] 之十一中抓取活动行网站的类似,都是用多线程来抓取,但是由于活动树网站 ,每个关键字搜索页的ur是固定,比如搜索“数字”结果有470个结果,没页10条记录,第二页的url和第一页的 url是一样的. 因此针对每个关键字用一个线程进行搜索. 具体代码如下: # coding=utf-8import osimport refrom selenium im…
15.1 屏幕抓取 15.1.1 Tidy和XHTML解析 Tidy:用来修复不规范且随意的HTML文档的工具. 为什么用XHTML: 和旧版本的HTML之间最主要的区别:HTML可能只用一个开始标签(<p>)结束一段然后开始下一段,而在XHTML中,首先要显示的关闭当前段落(</p>),  这种行为让XHTML更容易解析, 另外一个好处是:它是XML的一种,可以对他使用XML工具,例如xpath. 解析XTML用HTMLParser. 15.1.2 Beautiful Soup…
http://blog.csdn.net/my2010sam/article/details/14526223 --------------------- 对html的解析是网页抓取的基础,分析抓取的结果找到自己想要的内容或标签以达到抓取的目的. HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径. HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数…
首先,记录下遇到的问题吧,在抓取的过程中为了避免IO操作,主要用Redis做插入缓存,当内存占用率很大时,会周期性的持续到Mysql里 虽然是拆东墙补西墙,但把数据抓取完毕后持续化可以慢慢进行,毕竟数据已经保存到内存里了,但问题来了,由于Redis的内存管理机制 并不会在数据删除后立即释放内存,使得将数据删除后Redis的内存占用率还是很高,这里引出官方说明,希望能说明些情况: Redis will not always free up (return) memory to the OS whe…
一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来. 这样看来,网络爬虫就是一个爬行程序,一个抓取…
目的是对所有注释进行爬网. 下面列出了已爬网链接.如果您使用AJAX加载动态网页,则有两种方式对其进行爬网. 分别介绍了两种方法:(如果对代码有任何疑问,请提出改进建议)解析真实地址爬网示例是参考链接中提供的URL,网站上评论的链接必须使用 beats进行爬网.如果单击"网络"以刷新网页,则注释数据将位于这些文件中.通常,这些数据以json文件格式提供.然后找到注释数据文件.参见下图.单击预览以查看数据. 执行后,对数据进行爬取,添加注释并进行描述,并打印测试结果. 改进:仅将第一页上…