链家网 + gevent
2024-09-07 16:13:39
import gevent
from gevent import monkey
monkey.patch_all()
from gevent.queue import Queue
import time
import os
import requests
import re
start = time.perf_counter()
work = Queue()
# for i in range(1,101):
# url = f'https://sh.fang.lianjia.com/loupan/pg{i}/'
# print(url)
# work.put_nowait(url)
url = 'https://sh.fang.lianjia.com/loupan/pg{}/'
url_list = (url.format(i) for i in range(1,101))
[work.put_nowait(url) for url in url_list]
info_set = set()
def spider():
while not work.empty():
url = work.get_nowait()
res = requests.get(url).text
title = re.findall('<a href="/loup.*?itle="(.*?)"'
'.*?<div class="resb.*?<span>(.*?)</span>'
'.*?<span>(.*?)</span>'
'.*?<span class="number">(.*?)</span>'
'.*?<span class="desc"> (.*?)</span>',res,re.S)
for i in title:
info_set.add(i)
tasks = []
for x in range(200):
task = gevent.spawn(spider)
tasks.append(task)
gevent.joinall(tasks,timeout=6)
for i,n in enumerate(info_set):
title = f'标题: {n[0]}'
addr = f'地区: {n[1]}{n[2]}'
price = f'价格: {n[3]}{n[4]}'
print(f"""
{i}
{title}
{addr}
{price}
""")
with open('./lianjie.cvs','a',encoding='utf-8') as f:
f.writelines([title,addr,price,'\n'])
print('写入完成')
print(time.perf_counter()-start)
最新文章
- 关于oracle的准备
- 字符串去空格 java , js和Jquery 方法
- Socket重叠IO
- 分批次从musql取数据,每次取1000条
- 开发工具 之 PowerDesigner
- Chrome的隐身模式
- gcc编译参数-fPIC问题 `a local symbol&#39; can not be used when making a shared object;
- .Net程序员关于微信公众平台测试账户配置 项目总结
- LR实战之Discuz开源论坛——登录脚本检查点
- 老李分享:为何要使用 Web Services
- 使用SVG基本操作API
- Hibernate学习(二)关系映射----基于外键的单向一对一
- C# json转model 以及model转json
- [ilink32 Error] Fatal: Unable to open file &#39;DATA.DBXMSSQLMETADATAREADER.OBJ&#39;
- java中变量使用的总结
- 二级域名 cookie session 共享
- Elasticsearch5.0 安装问题
- 【转】C# Async/Await 异步编程中的最佳做法
- tensorflow命令行参数:tf.app.flags.DEFINE_string、tf.app.flags.DEFINE_integer、tf.app.flags.DEFINE_boolean
- Python基础 - 总则