1. 线程池 的应用

from multiprocessing.dummy import Pool
import requests
from lxml import etree
url="https://sz.lianjia.com/ershoufang/co32/"
# url="https://sz.lianjia.com/ershoufang/pg2co32/" from multiprocessing.dummy import Pool headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', } import pymongo res = requests.get(url=url,headers=headers) class Ljia(): def __init__(self): self.start_url ="https://sz.lianjia.com/ershoufang/co32/" self.headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', }
self.client = pymongo.MongoClient()
self.collention = self.client.Ljia.lianjia def get_content(self,url): # 提取数据
html = requests.get(url,headers=self.headers) tree = etree.HTML(html.text) li_list=tree.xpath('//ul[@class="sellListContent"]/li') for li in li_list:
item={}
item['title'] =li.xpath(".//div[@class='title']/a/text()")[0]
item['detail_url'] = li.xpath(".//div[@class='houseInfo']/a/@href")[0]
item['houseInfo'] =li.xpath(".//div[@class='houseInfo']//text()")
item['houseInfo'] =[i.strip() for i in item['houseInfo'] if i.strip()]
item['houseInfo'] = ''.join(item['houseInfo'])
item['totalPrice'] = li.xpath(".//div[@class='totalPrice']//text()")
item['totalPrice'] = [i.strip()for i in item['totalPrice'] if i.strip()]
item['totalPrice'] = ''.join(item['totalPrice'])
item['Price'] = li.xpath(".//div[@class='unitPrice']/span/text()")[0]
item['followInfo'] =li.xpath(".//div[@class='followInfo']//text()")
item['followInfo'] = [i.strip() for i in item['followInfo'] if i.strip()]
item['followInfo'] = ''.join( item['followInfo']) print(item) return item def get_page_url(self): # 生成待抓取的url yield self.start_url for i in range(2,101): url = "https://sz.lianjia.com/ershoufang/pg%sco32/"%i print('正在抓取:=============%s'%url) yield url def save_data(self,item):
# 保存数据
if item: self.collention.insert(item) else:
print('数据不存在===========') def run(self): pool = Pool(5)
# 线程池进行抓取数据
data = pool.map(self.get_content,self.get_page_url())
# 线程池进行存储
pool.map(self.save_data,data)
if __name__ == '__main__': lian_jia = Ljia() lian_jia.run()

l线程池抓取lianjia的更多相关文章

  1. 基于requests模块的cookie,session和线程池爬取

    目录 基于requests模块的cookie,session和线程池爬取 基于requests模块的cookie操作 基于requests模块的代理操作 基于multiprocessing.dummy ...

  2. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

  3. Python爬虫【四】Scrapy+Cookies池抓取新浪微博

    1.设置ROBOTSTXT_OBEY,由true变为false 2.设置DEFAULT_REQUEST_HEADERS,将其改为request headers 3.根据请求链接,发出第一个请求,设置一 ...

  4. Python+Requests+异步线程池爬取视频到本地

    1.本次项目为获取梨视频中的视频,再使用异步线程池下载视频到本地 2.获取视频时,其地址中的Url是会动态变化,不播放时src值为图片的地址,播放时src值为mp4格式 3.查看视频链接是否存在aja ...

  5. 使用redis所维护的代理池抓取微信文章

    搜狗搜索可以直接搜索微信文章,本次就是利用搜狗搜搜出微信文章,获得详细的文章url来得到文章的信息.并把我们感兴趣的内容存入到mongodb中. 因为搜狗搜索微信文章的反爬虫比较强,经常封IP,所以要 ...

  6. 使用requests、BeautifulSoup、线程池爬取艺龙酒店信息并保存到Excel中

    import requests import time, random, csv from fake_useragent import UserAgent from bs4 import Beauti ...

  7. 使用requests、re、BeautifulSoup、线程池爬取携程酒店信息并保存到Excel中

    import requests import json import re import csv import threadpool import time, random from bs4 impo ...

  8. 代理池抓取基础版-(python协程)--抓取网站(西刺-后期会持续更新)

    # coding = utf- __autor__ = 'litao' import urllib.request import urllib.request import urllib.error ...

  9. 爬虫 requests模块的其他用法 抽屉网线程池回调爬取+保存实例,gihub登陆实例

    requests模块的其他用法 #通常我们在发送请求时都需要带上请求头,请求头是将自身伪装成浏览器的关键,常见的有用的请求头如下 Host Referer #大型网站通常都会根据该参数判断请求的来源 ...

随机推荐

  1. Anniversary party(hdu1520)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. html简单随机抽奖页面(在线抽奖、随机选取、自动挑选)

    下载: https://download.csdn.net/download/weixin_44893902/20366745 效果: 代码: <!doctype html> <ht ...

  3. mysql总结笔记 -- 索引篇

    索引的作用 索引是用来高效的获取数据的 排好序 的 数据结构,如果没有索引,可能会导致查询某一条记录的时候遍历整张表:所以适当的索引可以大大的提升检索速度: 索引的数据结构 二叉树 假如说我们有一列数 ...

  4. 每天学一点——python注释规范

    python注释规范 python注释语法 这个是注释 注释是不影响代码运行的 当然注释也是有书写规范的,就像图片中的 注释前面#加空格再加上这条代码的注释(单行注释用#) 不然你会得到下面的结果 * ...

  5. Java Springboot webSocket简单实现,调接口推送消息到客户端socket

    Java Springboot webSocket简单实现,调接口推送消息到客户端socket 后台一般作为webSocket服务器,前台作为client.真实场景可能是后台程序在运行时(满足一定条件 ...

  6. Hbase集群安装Version1.1.5

    Hbase集群安装,基于版本1.1.5, 使用hbase-1.1.5.tar.gz安装包. 1.安装说明 使用外部Zookeeper集群而非Hbase自带zookeeper, 使用Hadoop文件系统 ...

  7. Laravel Redis分布式锁实现源码分析

    首先是锁的抽象类,定义了继承的类必须实现加锁.释放锁.返回锁拥有者的方法. namespace Illuminate\Cache; abstract class Lock implements Loc ...

  8. APICloud超实用经验分享——平台功能

    从2016年开始使用APICloud进行app项目开发,到现在也有五六年了.在此过程中伴随着APICloud一起成长,踩过一些坑,自己的技术也提升不少.在APICloud 推出avm框架一年之后,ID ...

  9. CentOS7添加开机启动服务或脚本

    方法一(rc.local) 改方式配置自动启动最为简单,只需要修改rc.local文件 由于在centos7中/etc/rc.d/rc.local的权限被降低了,所以需要赋予其可执行权 chmod + ...

  10. 不用find,怎样递归地给目录设置700,给文件设置600权限?

    https://stackoverflow.com/questions/36553701/how-to-set-permissions-recursively-700-for-folders-and- ...