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. 【LeetCode】96. Unique Binary Search Trees 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 记忆化递归 动态规划 卡特兰数 日期 题目地址:ht ...

  2. Lotus and Horticulture

    Lotus and Horticulture Accepts: 91 Submissions: 641 Time Limit: 4000/2000 MS (Java/Others) Memory Li ...

  3. 【嵌入式】keil不识别野火高速dap的问题

    解决方法:https://www.firebbs.cn/thread-28093-1-1.html

  4. 【计理01组03号】Java基础知识

    简单数据类型的取值范围 byte:8 位,1 字节,最大数据存储量是 255,数值范围是 −128 ~ 127. short:16 位,2 字节,最大数据存储量是 65536,数值范围是 −32768 ...

  5. Java实习生常规技术面试题每日十题Java基础(七)

    目录 1. Java设计模式有哪些? 2.GC是什么?为什么要有GC? 3. Java中是如何支持正则表达式. 4.比较一下Java和JavaSciprt. 5.Math.round(11.5) 等于 ...

  6. Java支持IPv6研究

    1.Java对IPv6的支持 相对其他开发语言而言,Java对IPv6的支持是比较透明的, 如果全部采用域名(主机名)的方式进行通信,那么基本不需要修改也无需编译原来的代码就可以直接在IPv6上运行. ...

  7. Linux密码文件介绍

    1. 查看shadow文件内容```cat /etc/shadow```可以看到shadow文件内容,例如:```root:$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.:148 ...

  8. JUC之Callable接口回顾和JUC辅助类

    Callable接口和JUC辅助类 Callable接口: 回顾: 创建线程的四种方式: 继承Thread 实现runnable接口 实现callable接口 使用线程池 之前的文章:多线程编程1-定 ...

  9. python接口自动化,从excel取param的内容太多,使用eval转换报错'EOL while scanning string literal

    背景: 做接口自动化时,有个接口的参数内容很多,可以从excel中读取出来,但是在eval()进行转化时,就报错"'EOL while scanning string literal&quo ...

  10. js跨域请求解决方案

    什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的. 广义的跨域: 1.) 资源跳转: A链接.重定向.表单提交 2.) 资源嵌入: <link>.&l ...