from multiprocessing import Process,Queue

import requests

import re

from lxml.html import etree

import json

import time

from concurrent.futures import ProcessPoolExecutor

def down_load_page_data(req_url):

pattern = re.compile('.*?page=(\d+).*?city_id=(\d+).*?shop_id=(\d+)')

result = re.findall(pattern, req_url)[0]

DATE_SHOW_LOC = result[1]

DATE_SHOW_SHOP = result[2]

response = download_data(req_url,DATE_SHOW_LOC,DATE_SHOW_SHOP)

if response.status_code == 200:

# print(result)

current_page = int(result[0])

if current_page == 1:

data = {'page':current_page,'data':response.text}

with open(str(result[1])+'.html','w') as file:

file.write(response.text)

next_page = re.sub('page=\d+', 'page=' + str(current_page + 1), response.url)

print('正在获取第'+str(current_page+1)+'页',DATE_SHOW_LOC,DATE_SHOW_SHOP)

else:

data = {'page':current_page, 'data': response.text}

if current_page !=1:

if isinstance(json.loads(response.text),list):

next_page = re.sub('page=\d+','page='+str(current_page+1),response.url)

print('正在获取第' + str(current_page+1) + '页', DATE_SHOW_LOC, DATE_SHOW_SHOP)

else:

next_page = None

print(response.text)

print('已获取到' + str(current_page) + '页','没有数据了',DATE_SHOW_LOC, DATE_SHOW_SHOP)

return data,next_page

def parse_data(futures):

# print('正在解析数据')

data = futures.result()[0]

next_page = futures.result()[1]

if next_page:

handler = download_page_pool.submit(down_load_page_data,next_page)

handler.add_done_callback(parse_data)

if data['page'] == 1:

print('解析第一页数据')

html_element = etree.HTML(data['data'])

hot_active = html_element.xpath('//div[@class="hot_detail fn-clear"]')

download_detail_pool = ProcessPoolExecutor(2)

for hot_div in hot_active:

# 活动详情的url地址

full_detail_url = 'http://date.jiayuan.com' + hot_div.xpath('.//h2[@class="hot_title"]/a/@href')[0]

handler = download_detail_pool.submit(download_data,full_detail_url)

handler.add_done_callback(parse_detail_data)

more_active = html_element.xpath('//ul[@class="review_detail fn-clear t-activiUl"]/li')

for more_li in more_active:

# 活动详情的url地址

full_detail_url = 'http://date.jiayuan.com' + more_li.xpath('.//a[@class="review_link"]/@href')[0]

handler = download_detail_pool.submit(download_data, full_detail_url)

handler.add_done_callback(parse_detail_data)

download_detail_pool.shutdown()

else:

# 获取到url中的相关参数(上一次请求的页码,城市id,地区id)

print('解析其他页面数据', data['page'])

data = json.loads(data['data'])

if isinstance(data, list):

# 是列表,说明得到的是正确的数据,

download_detail_pool = ProcessPoolExecutor(2)

for sub_dict in data:

id = sub_dict['id']

full_detail_url = 'http://date.jiayuan.com/activityreviewdetail.php?id=%s' % id

handler = download_detail_pool.submit(download_data, full_detail_url)

handler.add_done_callback(parse_detail_data)

download_detail_pool.shutdown()

def download_data(req_url,DATE_SHOW_LOC=None,DATE_SHOW_SHOP=None):

"""

下载器,执行任务的下载

"""

if DATE_SHOW_LOC and DATE_SHOW_SHOP:

cookie = '_gscu_1380850711=43812116hs5dyy11; accessID=20181222071935501079; PHPSESSID=b59c131c44e32d744ab8ad3bb6e27a45; plat=date_pc; uv_flag=223.72.78.37; user_access=1; DATE_SHOW_LOC=%s; DATE_SHOW_SHOP=%s' % (DATE_SHOW_LOC,DATE_SHOW_SHOP)

else:

cookie = '_gscu_1380850711=43812116hs5dyy11; accessID=20181222071935501079; PHPSESSID=b59c131c44e32d744ab8ad3bb6e27a45; plat=date_pc; uv_flag=223.72.78.37; user_access=1; DATE_SHOW_LOC=4201; DATE_SHOW_SHOP=33'

req_header = {

'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',

'Cookie': cookie,

'Referer': 'http://date.jiayuan.com/eventslist.php',

}

response = requests.get(req_url, headers=req_header)

if response.status_code == 200:

print(response.url)

return response

def parse_detail_data(futures):

response = futures.result()

html_element = etree.HTML(response.text)

with open('detail.html','w') as file:

file.write(response.text)

#创建一个字典,存放获取的数据

item = {}

# 活动标题

item['title'] = ''.join(html_element.xpath('//h1[@class="detail_title"]/text()')[0])

# 活动时间

item['time'] = ','.join(html_element.xpath('//div[@class="detail_right fn-left"]/ul[@class="detail_info"]/li[1]//text()')[0])

# 活动地址

item['adress'] = html_element.xpath('//ul[@class="detail_info"]/li[2]/text()')[0]

# 参加人数

item['joinnum'] = html_element.xpath('//ul[@class="detail_info"]/li[3]/span[1]/text()')[0]

# 预约人数

item['yuyue'] = html_element.xpath('//ul[@class="detail_info"]/li[3]/span[2]/text()')[0]

# 介绍

item['intreduces'] = html_element.xpath('//div[@class="detail_act fn-clear"][1]//p[@class="info_word"]/span[1]/text()')[0]

# 提示

item['point'] = html_element.xpath('//div[@class="detail_act fn-clear"][2]//p[@class="info_word"]/text()')[0]

# 体验店介绍

item['introductionStore'] = ''.join(html_element.xpath('//div[@class="detail_act fn-clear"][3]//p[@class="info_word"]/text()'))

# 图片连接

item['coverImage'] = html_element.xpath('//div[@class="detail_left fn-left"]/img/@data-original')[0]

# print(item['title'],item['adress'],item['time'])

# print(item)

with open('huodong.json','a+') as file:

json_str = json.dumps(item,ensure_ascii=False) + '\n'

file.write(json_str)

if __name__ == '__main__':

#设置任务队列

# 'http://date.jiayuan.com/eventslist_new.php?page=1&city_id=31&shop_id=15',

# # 湖北武汉地区的活动url接口

# 'http://date.jiayuan.com/eventslist_new.php?page=1&city_id=4201&shop_id=33',

# taskQueue.put('http://date.jiayuan.com/eventslist_new.php?page=1&city_id=31&shop_id=15')

# taskQueue.put('http://date.jiayuan.com/eventslist_new.php?page=1&city_id=4201&shop_id=33')

# taskQueue.put('http://date.jiayuan.com/eventslist_new.php?page=1&city_id=1501&shop_id=51')

download_page_pool = ProcessPoolExecutor(4)

# download_detail_pool = ProcessPoolExecutor(4)

start_urls = [

'http://date.jiayuan.com/eventslist_new.php?page=1&city_id=31&shop_id=15',

'http://date.jiayuan.com/eventslist_new.php?page=1&city_id=4201&shop_id=33',

'http://date.jiayuan.com/eventslist_new.php?page=1&city_id=1501&shop_id=51',

]

for url in start_urls:

handler = download_page_pool.submit(down_load_page_data,url)

handler.add_done_callback(parse_data)

python爬虫进程池_python爬虫之进程池爬虫(世纪佳缘案例)相关推荐

  1. python是一种面向对象的高级语言_爬了世纪佳缘后发现了一个秘密,世纪佳缘找对象靠谱吗?...

    今天在知乎上看到一个关于[世纪佳缘找对象靠谱吗?]的讨论,其中关注的人有 1903,被浏览了 1940753 次,355 个回答中大多数都是不靠谱.用 Python 爬取世纪佳缘的数据是否能证明它的不 ...

  2. python爬虫进程池_python爬虫之进程池爬取(世纪佳缘案例)

    from concurrent.futures import ProcessPoolExecutor import requests import time,re,json from lxml.htm ...

  3. 大数据告诉你,世纪佳缘都是谁在相亲(python爬虫分析,附全部代码)

    公众号: 数据小斑马,关注即可获得价值1000元的数据分析学习资料 数据分析学习目录: 一.Excel系列--四大常用函数及十大高级图表 二.SQL系列--性能优化/多表关联/窗口分析函数等 三.统计 ...

  4. python 爬虫登录世纪佳缘

    python 爬虫登录世纪佳缘 程序运行相关环境: win7 python2.7.13 python requests包 python beautifulsoup包 代码示例: # -*- codin ...

  5. Python爬虫实战+数据分析+数据可视化(世纪佳缘)

    中国男女比例的失衡,再加上广大男同胞们都想着努力为自己的事业而奋斗很少能够接触到女人,使得乎广大男同胞大都选择相亲网站来找到属于自己的另一半,,作为90的我深知广大男同胞的心情,于是乎博主通过对世纪佳 ...

  6. 自娱自乐写爬虫 世纪佳缘篇

    最近一段时间不知怎得像是中了什么魔怔,特别的想用python写一个网络爬虫,也许是看了知乎上的某位大牛的分享,深感能自己写一个程序在浩瀚的互联网数据海洋中发现有意思的数据的酷炫,抑或就是想单纯的体验一 ...

  7. node爬虫实践:爬取世纪佳缘交友信息

    自从node这一运行在服务端的 JavaScript横空出世以后,赋予了前端开发工程师强大的力量.文件I/O操作,连数据库写接口接口等等.我在刚开始学习的node的时候,尝试着爬了一个比较小的相亲网站 ...

  8. mysql存储爬虫图片_世纪佳缘信息爬取存储到mysql,下载图片到本地,从数据库选取账号对其发送消息更新发信状态...

    利用这种方法,可以把所有会员信息存储下来,多线程发信息,10秒钟就可以对几百个会员完成发信了. 首先是筛选信息后爬取账号信息, #-*-coding:utf-8-*- importrequests,r ...

  9. python多线程爬取世纪佳缘女生资料并简单数据分析

    一. 目标 ​ 作为一只万年单身狗,一直很好奇女生找对象的时候都在想啥呢,这事也不好意思直接问身边的女生,不然别人还以为你要跟她表白啥的,况且工科出身的自己本来接触的女生就少,即使是挨个问遍,样本量也 ...

最新文章

  1. Nginx学习总结(2)——Nginx手机版和PC电脑版网站配置
  2. 元数据管理Atlas
  3. shell添加用户时设置密码脚本
  4. Qt5 解决QSlider的valueChanged槽函数中setValue导致一直回调的问题
  5. Word导出pdf时Origin图片出现重影(重叠)
  6. API v3版微信支付平台证书获取与自动更新
  7. 青轩桃李能几何,流光欺人忽蹉跎。 poll
  8. 快速集成腾讯云短信实现短信发送(Spring Boot)
  9. 计算两个时间的间隔时长
  10. wannier插值能带拟合5
  11. clicktorun 离线_Project 2016 和 Visio 2016 的 Office Click-to-Run 永久(C2R P)版本
  12. NLP-对话聊天机器人
  13. mac时间机器文件服务器,在 Mac 上可以与时间机器配合使用的磁盘类型
  14. 基于微信PC端小程序抓包方法
  15. 【回忆 总结】我的大学四年
  16. Exception: D:\Unity\Editor\Data\il2cpp/build/il2cpp.exe did not run properly!
  17. 「自控元件及线路」9 旋转变压器
  18. 计算机桌面打不开原因,电脑桌面图标打不开怎么办?
  19. 如何快速批量图片格式转换呢?
  20. Problem 2091 播放器 模拟问题 I never stop loving you, but I just don't want anybody to see it any more.

热门文章

  1. php数组的定义和输出方式总结
  2. 淘宝无货源店群模式和亚马逊无货源店群模式有什么不同?
  3. 前段ui需要些html代码吗,UI设计师为什么要了解前端代码?
  4. r语言中,为什么用as.matrix将dataframe转化为matrix后,里面的数字都变成字符串了...
  5. 持续更新!福昕阅读器那些超好用的隐藏功能
  6. 大数据可视化案例:360骗子地图
  7. Beaglebone 中 U-Boot 的启动过程
  8. windows普通用户加入管理员组
  9. 智科专业大二时候的python课程设计:亚马逊数据集股票分析
  10. 快消品新零售时代,“互联网+”渗透生活方方面面