【多进程并行版本】爬取链家二手房前100页标签,进行统计
前言
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页标签,进行统计相关推荐
- 爬取链家二手挂单房屋 - 匹配百度地图API坐标 - python出地图【2】(end) echarts调用百度地图画自己喜欢的底图,最终python出地图
在上一步得到了所有期待项目的地理坐标之后,可以把数据体现在地图上给领导看了.首先需要一张符合自己审美风格的底图来给领导留下强烈的印象:因为我对百度地图的初始配色非常不满,所以这个对我来说是刚需,恰好又 ...
- 多进程+多线程爬取链家武汉二手房价
因为数据分析的需要,就写了爬取链家武汉的数据.因为用scrapy框架感觉太慢了,就自己写了个多进程同步执行的代码. 1.数据量:20000+ 2.程序环境:Python3.6--->用的Anac ...
- Python爬取链家成都二手房源信息
作者 | 旧时晚风拂晓城 编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 公众号后台回复:「成都二手房数据」,获 ...
- Python爬取链家成都二手房源信息,异步爬虫实战项目!
本文先熟悉并发与并行.阻塞与非阻塞.同步与异步.多线程.多线程.协程的基本概念.再实现asyncio + aiohttp爬取链家成都二手房源信息的异步爬虫,爬取效率与多线程版进行简单测试和比较. 1. ...
- 如何爬取链家网页房源信息
由于个人安装的Python版本是2.7的,因此此后的相关代码也是该版本. 爬取网页所有信息 利用urllib2包来抓取网页的信息,先介绍下urllib2包的urlopen函数. urlopen:将 ...
- 一、如何爬取链家网页房源信息
由于个人安装的Python版本是2.7的,因此此后的相关代码也是该版本. 爬取网页所有信息 利用urllib2包来抓取网页的信息,先介绍下urllib2包的urlopen函数. urlopen:将网页 ...
- Python 小项目 01 爬虫项目 爬取链家网南京地区二手房信息
SpiderLianjia 介绍 python爬虫小程序,爬取链家网南京地区普通住宅二手房数据. 代码下载: https://gitee.com/lihaogn/SpiderLianjia 1 程序设 ...
- python爬取链家_python+scrapy爬虫(爬取链家的二手房信息)
之前用过selenium和request爬取数据,但是感觉速度慢,然后看了下scrapy教程,准备用这个框架爬取试一下. 1.目的:通过爬取成都链家的二手房信息,主要包含小区名,小区周边环境,小区楼层 ...
- 如何高效地爬取链家的房源信息(四)
"Python实现的链家网站的爬虫第四部分,最后一部分." 本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用. 本系列第 ...
最新文章
- 机器人控制算法——Bayes Filter贝叶斯滤波器
- 扛住100亿次请求?我们来试一试!
- jQuery事件绑定on()、bind()与delegate() 方法详解
- docker 不包含依赖 打包_从零开始学K8s: 4.Docker是什么
- sdk编程改变static控件字体和颜色
- 开机发现超级管理员账户不见了
- mysql数据库 day06
- vim的一些基本应用
- ISOLINUX: A bootloader for Linux using ISO 9660/El Torito CD-ROMs
- 基于JAVA+SpringMVC+Mybatis+MYSQL的药方中医管理系统
- 全面的SVM理论讲解
- java stax_浅谈stax
- SCRT中只换行不回车的问题(阶梯)
- Google Hacking 搜索引擎攻击与防范
- 不将visio的白色背景复制到ppt上
- 我的微软亚洲研究院实习生面试经历
- 电脑系统,win7与win10到底有什么区别?
- 2-6_Cleaning_Data
- 前端导出word实现方法
- 各种音视频编解码学习详解之 编解码学习笔记(十三):容器