前言

python在进程间通信会比较麻烦~
要注意,这里我们想到的时候多个进程一起维护一个字典。
所以,我加了锁。这里还是存在一个可能的改进方法,就是考察你的锁加在哪个位置来判断。
旧的单进程版本

代码一:

用时: 10.798075914382935秒
看了三千个网页的样子。还算不错的啦。但是还是想要跟好的优化~

import requests
from bs4 import BeautifulSoup
import re
from multiprocessing import Manager, Lock, Processdef getUrl(url='https://gz.lianjia.com/ershoufang/pg{}/'):for i in range(100):yield url.format(i + 1)def findAInUrl(url, lock, tag):res = requests.get(url)soup = BeautifulSoup(res.text, 'lxml')lis = soup.find_all('li', attrs={'class': "clear"})for li in lis:info = li.find('div', attrs={'class': 'info clear'})tags = info.find('div', attrs={'class': 'tag'})for t in tags:ans = re.findall('(?<=\>).+(?=\<)', str(t))if '距离' in ans[0]:ans[0] = '地铁'lock.acquire()if ans[0] not in tag:tag[ans[0]] = 1else:tag[ans[0]] += 1lock.release()if __name__ == '__main__':tag = Manager().dict()pList = []lock = Lock()for url in getUrl():p = Process(target=findAInUrl, args=(url, lock, tag))pList.append(p)p.start()for p in pList:p.join()print(tag)

代码二

用时:11.187129020690918秒

import requests
from bs4 import BeautifulSoup
import re
from multiprocessing import Manager, Lock, Process
import timedef getUrl(url='https://gz.lianjia.com/ershoufang/pg{}/'):for i in range(100):yield url.format(i + 1)def findAInUrl(url, lock, tag):res = requests.get(url)soup = BeautifulSoup(res.text, 'lxml')lis = soup.find_all('li', attrs={'class': "clear"})for li in lis:info = li.find('div', attrs={'class': 'info clear'})tags = info.find('div', attrs={'class': 'tag'})lock.acquire()for t in tags:ans = re.findall('(?<=\>).+(?=\<)', str(t))if '距离' in ans[0]:ans[0] = '地铁'if ans[0] not in tag:tag[ans[0]] = 1else:tag[ans[0]] += 1lock.release()if __name__ == '__main__':st = time.time()tag = Manager().dict()pList = []lock = Lock()for url in getUrl():p = Process(target=findAInUrl, args=(url, lock, tag))pList.append(p)p.start()for p in pList:p.join()print(tag)et = time.time()print(et- st)

代码三

用时:11.184273481369019秒

import requests
from bs4 import BeautifulSoup
import re
from multiprocessing import Manager, Lock, Process
import timedef getUrl(url='https://gz.lianjia.com/ershoufang/pg{}/'):for i in range(100):yield url.format(i + 1)def findAInUrl(url, lock, tag):res = requests.get(url)soup = BeautifulSoup(res.text, 'lxml')lis = soup.find_all('li', attrs={'class': "clear"})lock.acquire()for li in lis:info = li.find('div', attrs={'class': 'info clear'})tags = info.find('div', attrs={'class': 'tag'})for t in tags:ans = re.findall('(?<=\>).+(?=\<)', str(t))if '距离' in ans[0]:ans[0] = '地铁'if ans[0] not in tag:tag[ans[0]] = 1else:tag[ans[0]] += 1lock.release()if __name__ == '__main__':st = time.time()tag = Manager().dict()pList = []lock = Lock()for url in getUrl():p = Process(target=findAInUrl, args=(url, lock, tag))pList.append(p)p.start()for p in pList:p.join()print(tag)et = time.time()print(et- st)

前三个版本的代码区别在于锁的位置的不同,导致了时间的不一样。

【多进程并行版本】爬取链家二手房前100页标签,进行统计相关推荐

  1. 爬取链家二手挂单房屋 - 匹配百度地图API坐标 - python出地图【2】(end) echarts调用百度地图画自己喜欢的底图,最终python出地图

    在上一步得到了所有期待项目的地理坐标之后,可以把数据体现在地图上给领导看了.首先需要一张符合自己审美风格的底图来给领导留下强烈的印象:因为我对百度地图的初始配色非常不满,所以这个对我来说是刚需,恰好又 ...

  2. 多进程+多线程爬取链家武汉二手房价

    因为数据分析的需要,就写了爬取链家武汉的数据.因为用scrapy框架感觉太慢了,就自己写了个多进程同步执行的代码. 1.数据量:20000+ 2.程序环境:Python3.6--->用的Anac ...

  3. Python爬取链家成都二手房源信息

    作者 | 旧时晚风拂晓城 编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 公众号后台回复:「成都二手房数据」,获 ...

  4. Python爬取链家成都二手房源信息,异步爬虫实战项目!

    本文先熟悉并发与并行.阻塞与非阻塞.同步与异步.多线程.多线程.协程的基本概念.再实现asyncio + aiohttp爬取链家成都二手房源信息的异步爬虫,爬取效率与多线程版进行简单测试和比较. 1. ...

  5. 如何爬取链家网页房源信息

    由于个人安装的Python版本是2.7的,因此此后的相关代码也是该版本. 爬取网页所有信息  利用urllib2包来抓取网页的信息,先介绍下urllib2包的urlopen函数.  urlopen:将 ...

  6. 一、如何爬取链家网页房源信息

    由于个人安装的Python版本是2.7的,因此此后的相关代码也是该版本. 爬取网页所有信息 利用urllib2包来抓取网页的信息,先介绍下urllib2包的urlopen函数. urlopen:将网页 ...

  7. Python 小项目 01 爬虫项目 爬取链家网南京地区二手房信息

    SpiderLianjia 介绍 python爬虫小程序,爬取链家网南京地区普通住宅二手房数据. 代码下载: https://gitee.com/lihaogn/SpiderLianjia 1 程序设 ...

  8. python爬取链家_python+scrapy爬虫(爬取链家的二手房信息)

    之前用过selenium和request爬取数据,但是感觉速度慢,然后看了下scrapy教程,准备用这个框架爬取试一下. 1.目的:通过爬取成都链家的二手房信息,主要包含小区名,小区周边环境,小区楼层 ...

  9. 如何高效地爬取链家的房源信息(四)

    "Python实现的链家网站的爬虫第四部分,最后一部分." 本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用. 本系列第 ...

最新文章

  1. 机器人控制算法——Bayes Filter贝叶斯滤波器
  2. 扛住100亿次请求?我们来试一试!
  3. jQuery事件绑定on()、bind()与delegate() 方法详解
  4. docker 不包含依赖 打包_从零开始学K8s: 4.Docker是什么
  5. sdk编程改变static控件字体和颜色
  6. 开机发现超级管理员账户不见了
  7. mysql数据库 day06
  8. vim的一些基本应用
  9. ISOLINUX: A bootloader for Linux using ISO 9660/El Torito CD-ROMs
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的药方中医管理系统
  11. 全面的SVM理论讲解
  12. java stax_浅谈stax
  13. SCRT中只换行不回车的问题(阶梯)
  14. Google Hacking 搜索引擎攻击与防范
  15. 不将visio的白色背景复制到ppt上
  16. 我的微软亚洲研究院实习生面试经历
  17. 电脑系统,win7与win10到底有什么区别?
  18. 2-6_Cleaning_Data
  19. 前端导出word实现方法
  20. 各种音视频编解码学习详解之 编解码学习笔记(十三):容器

热门文章

  1. JAVA架构师面试题and如何成为架构师
  2. Java TCP/UDP socket 编程流程总结
  3. ERP_Oracle Erp 11i 和 R12的区别概述(概念)
  4. 【翻译】Ext JS 4.2介绍
  5. SQL SERVER:SQLDMO库文件的组成
  6. 剑指Offer:剪绳子(动态规划、贪婪算法)
  7. 【Python学习系列二十八】绘图库pyecharts
  8. Java机器学习库ML之十一线性SVM
  9. DLL的高级操作技术——Windows核心编程学习手札之二十
  10. Springer投稿 tex上传PDF乱码