python爬虫之多线程爬取链家郑州郑东新区二手房信息

本文主要是介绍python爬虫之多线程爬取链家郑州郑东新区二手房信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上次获取了链家658家的郑州二手房信息的房源,本次获取的为9600多家的房源信息,共一百页,但由于太多,所以就获取了前50页的内容。获取的速度也是非常的快。
代码如下:

'''
多线程爬取链家二手房信息
'''
# 导入第三方库
import time
import requests
import threading
from lxml import etree
from fake_useragent import UserAgent
from queue import Queue# 随机请求头
ua = UserAgent()# 定义多线程爬取链家的类
class LianJiaDuo():# 初始化对象def __init__(self):# 请求的初始urlself.start_url = "https://zz.lianjia.com/ershoufang/zhengdongxinqu/pg{}/"# 定义请求头self.headers = {"User-Agent": ua.random}# 创建url队列self.url_queue = Queue()# 创建html队列self.html_queue = Queue()# 创建提取内容的队列self.content_queue = Queue()# 定义构造开始url的地址的方法def get_url_list(self):# 构造50个url地址for i in range(1, 51):# 将构造的地址加入到url队列中self.url_queue.put(self.start_url.format(i))# 定义解析url得到对应html文本的方法def paser_url(self):while True:# 从队列中取url地址url = self.url_queue.get()time.sleep(0.5)html = requests.get(url, headers=self.headers).content.decode()# 将请求得到html文本添加到html队列中self.html_queue.put(html)# 将url队列中的url地址减一self.url_queue.task_done()# 定义得到提取信息的方法def get_content_list(self):while True:# 从html队列中取htmlhtml_str = self.html_queue.get()e = etree.HTML(html_str)# 提取所有的div标签div_list = e.xpath('//ul[@class="sellListContent"]//div[@class="info clear"]')data = []for div in div_list:item = {}# 提取名称title = div.xpath('./div[@class="title"]/a/text()')item["title"] = title[0]# 提取位置positionInfo = div.xpath('./div[@class="flood"]/div[@class="positionInfo"]/a/text()')item["positionInfo"] = positionInfo[0]# 提取房屋信息houseInfo = div.xpath('./div[@class="address"]/div[@class="houseInfo"]/text()')item["houseInfo"] = houseInfo[0]# 提取总价total_price = div.xpath('./div[@class="priceInfo"]/div[@class="totalPrice"]/span/text()')total_price = [i + "万" for i in total_price]item["total_price"] = total_price[0]# 提取单价unit_price = div.xpath('./div[@class="priceInfo"]/div[@class="unitPrice"]/span/text()')item["unit_price"] = unit_price[0]# 添加进列表data.append(item)# 将提取的内容添加到content的队列中self.content_queue.put(data)# 实现html文本减一self.html_queue.task_done()# 定义保存文本信息的方法def save_data(self):# 遍历self.content_queuefor content in self.content_queue.get():with open("lianjia2.csv", "a") as f:for key, value in content.items():f.write(key + ',' + value + ',')f.write('\n')def run(self):thread_list = []for i in range(10):t_url = threading.Thread(target=self.get_url_list)thread_list.append(t_url)# 解析html文本的线程for i in range(10):t_parse = threading.Thread(target=self.paser_url)thread_list.append(t_parse)# 得到html文本的线程for i in range(15):t_html = threading.Thread(target=self.get_content_list)thread_list.append(t_html)# 保存提取信息的线程for i in range(20):t_save = threading.Thread(target=self.save_data)thread_list.append(t_save)# 开启线程for t in thread_list:t.setDaemon(True)t.start()# 阻塞线程,待其他线程结束之后,主线程结束for q in [self.url_queue, self.html_queue, self.content_queue]:q.join()if __name__ == '__main__':lianjia_spider = LianJiaDuo()lianjia_spider.run()

爬取结果:
在这里插入图片描述

这篇关于python爬虫之多线程爬取链家郑州郑东新区二手房信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180120

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de