爬虫

爬取优信二手车:循环遍历每页,获取相应的有价值字段信息,这里不详细阐释了。

多线程

Python中,使用concurrent.futures模块下的ThreadPoolExecutor类来实现线程池,因爬取过程无需考虑前后执行顺序,因此我使用较为灵活地抢占式线程池。

使用with关键字创建资源池,调用实例化对象的submit方法来启动线程资源池,并把需要线程执行的函数名称和函数参数传进去。

使用time模块记录程序运行的时长,在每段程序运行前后,各获取一次当前时间,差值就是运行时间。通过对比测试结果,多线程的效率比单线程还是快不少。

定时器

Python中,使用threading模块下的Timer类来实现,它的本质还是线程,只不过多了个时间参数,也是通过start方法来启动。

在定时器的触发函数里,再创建一个定时器,并将处理函数指向自己,就可以实现定时器的无限循环触发。

如果想停止无限循环的定时器,可以使用cancel函数。

最后贴上运行效果、完整代码:

平台:Win7,语言:Python,IDE:Spyder

youxin.py

"""

引用python的标准库模块

"""

import requests

from scrapy import Selector

from concurrent.futures import ThreadPoolExecutor

import threading

"""

下面是配置类数据(也可放在单独的config模块里)

"""

# 优信二手车网址

BASE_URL = 'https://www.xin.com/shenyang/i'

# 要爬取的最大页数

MAX_PAGE = 10

# 请求头信息

HOST = 'www.xin.com'

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 \

(KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'

# 输出显示样式

SHOW = '\n{name}\n{price}' + ' '*5 + '{other}\n{buy}\n\n' + '*'*50

# 时间间隔为3分钟的定时器

TIMER = 60*3

class YouXin():

def __init__(self):

'''

定义一个优信二手车爬虫类

'''

# 初始化请求头信息

self.headers = {

'Host': HOST,

'User-Agent': USER_AGENT,

}

def get_page(self, index):

"""

返回网页响应数据

index:页码索引

"""

# 构造动态url

url = BASE_URL + str(index)

try:

response = requests.get(url, headers=self.headers)

if response.status_code == 200:

return response.text

# 捕获并打印异常,保证程序不中断

except Exception as e:

print(e)

def parse_page(self, index):

"""

解析网页、提取字段

index:页码索引

"""

html = self.get_page(index)

if html:

# 构造一个Selector对象来提取数据

selector = Selector(text=html)

# 匹配整个页面的每个二手车信息块

items = selector.css('.carlist-show li')

for item in items:

# 构造一个可迭代的存放二手车信息的字典

yield {

# 获取名称

'name': item.css('.across .aimg::attr(title)').extract_first(),

# 获取价格

'price': item.css(

'.across .pad em::text').extract_first().replace(

'\n','').replace(' ',''),

# 获取上牌时间、公里数

'other': ''.join(item.css(

'.across .pad').xpath('./span[1]//text()').extract()),

# 获取购买活动

'buy': ':'.join(item.css('.across .pad').xpath(

'./span[position()>1]//text()').extract(

)).replace('\n','').replace(' ',''),

}

def main(self, index):

"""

主入口

index:页码索引

"""

for item in self.parse_page(index):

print(SHOW.format(**item))

def loop_timer_headle():

"""

循环触发定时器

"""

# 引用全局变量timer

global timer

# 构造类对象

youxin = YouXin()

# 构建3个线程抢占式爬取

with ThreadPoolExecutor(3) as executor:

for index in range(1, MAX_PAGE+1):

executor.submit(youxin.main, index)

# 给全局变量定时器timer赋值

timer = threading.Timer(TIMER, loop_timer_headle)

# 启动定时器

timer.start()

if __name__ == '__main__':

# 创建一个定时器,1秒后触发loop_timer_headle函数

timer = threading.Timer(1, loop_timer_headle)

# 启动定时器

timer.start()

最后,各位看官,您觉得文章还行,对您有帮助的话,请点个赞同,谢谢!

python 循环定时器 timer显示数据_【Python】多线程、定时循环爬取优信二手车信息...相关推荐

  1. python爬虫---爬取优信二手车

    import requests import re import redis from lxml import etree import pymysql #获取城市数据 class City():de ...

  2. python爬取大众点评数据_利用Node.js制作爬取大众点评的爬虫

    前言 Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C.Java不一样):for循环体({})内引用i的值实际上是循环结束之后 ...

  3. python java 爬数据_如何用java爬虫爬取网页上的数据

    当我们使用浏览器处理网页的时候,有时候是不需要浏览的,例如使用PhantomJS适用于无头浏览器,进行爬取网页数据操作.最近在进行java爬虫学习的小伙伴们有没有想过如何爬取js生成的网络页面吗?别急 ...

  4. python爬虫获取的网页数据为什么要加[0-python3爬虫爬取网页思路及常见问题(原创)...

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

  5. python爬虫———多线程threading模块爬取抖音用户信息

    爬虫背景: 由于原来的数据库中有1.5亿左右的用户id,但是其中有1.2亿的用户资料是不完整的(没有粉丝数量,点赞数量等,算是无用数据),现在老板要求将这些没有资料的用户更新信息,咋办? 刚开始的想法 ...

  6. node.js request get 请求怎么拿到返回的数据_使用JS和NodeJS爬取Web内容

    作者 | Shenesh Perera译者 | 王强策划 | 李俊辰这些年来 Javascript 进步飞快,又引入了称为 NodeJS 的运行时,所以已经成为了最流行和使用最广泛的语言之一.不管你要 ...

  7. python绘制折线图显示数据_漂亮图表也可用python信手拈来!一文教你学会用Python绘制堆积折线图...

    今天,和大家聊聊关于Python绘图相关的东东哦,还是和大家继续深耕Python经典的matplotlib库哦! 好啦,咱们就开始吧! 首先,咱们聊聊如何在Python中去绘制经典的堆积折线图 到这可 ...

  8. node爬取app数据_使用node.js如何爬取网站数据

    数据库又不会弄,只能扒扒别人的数据了. 搭建环境: (1).创建一个文件夹,进入并初始化一个package.json文件. npm init -y (2).安装相关依赖: npm install -- ...

  9. python二手车价格预测_Python爬取17w条二手车信息,带你揭秘保值率

    大家对于"保值率"这个词肯定是如数家珍,它是指一款车型使用一段时间后,出售价格与购入价格的比值,是反映汽车性价比的重要部分.相比较于外观.内饰甚至动力表现,一辆车的可靠性.用车成本 ...

最新文章

  1. 用ZipInputStream和ZipOutputStream实现文件及文件夹的压缩解压
  2. 没想到啊!3980元的Web前端视频今日免费送
  3. 【Python】WordCloud库的使用
  4. Docker 领衔 OpenSource.com 2014十佳开源软件排行榜
  5. cts测试之host_config.xml
  6. Access to the path ‘‘ is denied.解决方案
  7. nginx学习笔记01
  8. sklearn特征选择类库使用小结
  9. 2020-08-05流量计怎么选你学会了么?
  10. 有监督学习与无监督学习的几大区别
  11. 微信如何群发消息给所有人?
  12. java中多个if语句如何简化_8种if else语句简化方法
  13. 路易斯安那州立大学计算机科学,路易斯安那州立大学
  14. 最近看到需要去学习的点(持续记录)
  15. tableau-客户留存分析模型
  16. 李宏毅学习笔记35.GAN.06.Tips for Improving GAN
  17. 谷歌股票“一拆二”实为夯实掌舵权
  18. 使用 jQuery Validate 进行表单验证
  19. 先进先出-FCFS-调度算法-C语言实现
  20. WPF TabControl控件示例

热门文章

  1. SQL Server Management Studio默认英文输入法
  2. 为什么马斯克要说2022经济衰退?
  3. 仿逛丢Laucher
  4. 数据处理方法-算数编码
  5. select * from table where id=#{id}中id和#{id}是什么意思?
  6. 直播app源码,matlab 色彩布局描述符
  7. 快手 sig(sign)签名算法 java版
  8. [乐意黎]phpQuery采集微信公众号文章乱码
  9. 微信公众号-上传永久素材-中文文件名乱码 问题记录
  10. 在线身份证号码提取生日工具