一个简单的多进程爬虫(爬取某加盟创业网)

分享一个简单的多进程小爬虫,爬取某加盟创业网上所有加盟项目;

使用requests请求页面,re和beautifulSoup解析网页,multiprocessing进行多进程,pymongo数据入库;

(打开网站时发现密密麻麻、琳琅满目的加盟项目,但是爬完之后,发现数据也就只有那么一点点,甚至不到一千条数据,这就有点囧了)

# coding:utf-8
"""
    auther:zmister.com
"""
import requests
from bs4 import BeautifulSoup
from multiprocessing import Pool
import re
import pymongo
# 设置MongoDB连接信息
client = pymongo.MongoClient('localhost',27017)
cn_78 = client['cn_78']
project_info = cn_78['project_info']
# 浏览器头信息
header = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',
 'Connection': 'keep-alive',
}
# 获取分类类目名字和链接
def get_all_big_category():
 url = 'http://www.78.cn'
 wbdata = requests.get(url,headers=header).content
 soup = BeautifulSoup(wbdata,'lxml')
 cates = soup.select('div.xmFl_left > ul > li > p > a')
 cate_list = []
 for c in cates:
 cname = c.get_text()
 curl = c.get("href")
 cate_list.append(curl)
 # print(cate_list)
 return cate_list
# 从分类页面获取具体项目信息
def get_project_info(cates):
 url = 'http://www.78.cn'+cates
 wbdata = requests.get(url,headers=header).content
 soup = BeautifulSoup(wbdata,'lxml')
 cate = soup.select('div.dhy_cont3 > dl.cont3_top > dt > span')[0].get_text()
 subcate = soup.select('div.dhy_cont3 > dl.cont3_top > dd.check > a')[0].get_text()
 p_name = re.findall(r'target="_blank">(.*?)</a></h2>',str(soup))
 p_mony = re.findall(r'<dt>投资:<em class="red">¥<strong>(.*?)</strong>',str(soup))
 p_aear = re.findall(r'<dd>所属区域:(.*?)</dd>',str(soup))
 p_time = re.findall(r'<dd>累计时间:(.*?)</dd>',str(soup))
 for name,mony,aear,times in zip(p_name,p_mony,p_aear,p_time):
 data = {
 'cate':cate,
 'subcate':subcate,
 'name':name,
 'mony':mony,
 'aear':aear,
 'time':times,
 'minmoney':mony.replace('万','').split('-')[0] if '-' in mony else None,
 'maxmoney':mony.replace('万','').split('-')[-1] if '-' in mony else mony[0]
 }
 print(data)
 project_info.insert_one(data)
 print("插入数据成功")
if __name__ == '__main__':
 pool = Pool(processes=4)
 pool.map_async(get_project_info,get_all_big_category())
 pool.close()
 pool.join()

不知对各位有没有帮助?欢迎反馈

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2016-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

Arduino+Avr libc制作Badusb原理及示例讲解 | 长文含视频

一、 前言 2014年美国黑帽大会上研究人员JakobLell和Karsten Nohl展示了badusb的攻击方法后,国内与badusb相关的文章虽然有...

1785
来自专栏IMWeb前端团队

前端自动化测试工具 overview

本文作者:IMWeb 邝伟科 原文出处:IMWeb社区 未经同意,禁止转载 总结最近了解的前端测试的相关内容,如有问题,欢迎指出。 TDD vs BD...

19310
来自专栏AhDung

【C#】注意用“划算”的方式使用图标

先解释一下何谓“划算”:假定一个Winform程序包含若干个窗体,每个窗体左上角都要显示图标(即要设置Form.Icon属性),该程序本身也要有个图标(用于在O...

833
来自专栏finleyMa

Laravel 使用中间件进行权限控制

先看 文档 Laravel 中间件提供了一种方便的机制来过滤进入应用的 HTTP 请求。 这里实现一个只有admin角色才能访问特定路由的功能

1123
来自专栏企鹅号快讯

再见!陪伴我多年的setuna

hi,又到了charming的时间,平日里用setuna截图小工具的人肯定大有人在,但是最近我发现了一个比它更好用的小工具——PureRef,借此机会推荐一下~...

20410
来自专栏小白安全

小白博客 Windows最基本快捷键功能

今天要说的东西,可能不少朋友都会觉得太基础,或者不适用但是还会有不少朋友喜欢的 其实 Win 的快捷键有很多,甚至很多人还能自己把热键改成自己喜欢的。 ? 首先...

2745
来自专栏专业duilib使用+业余界面开发

duilib窗体最小化与还原时有win原生标题栏闪现且无动画效果

转自我自己的csdn博客。原文:https://blog.csdn.net/u012081284/article/details/83618075

1095
来自专栏Petrichor的专栏

Python规范

PEP:Python的PEP文档是一组不断发展的标准文档,PEP是Python Enhancement Proposal的首字母缩写。就像TCPIP协议使用R...

1142
来自专栏星流全栈

Github开源免费编程书籍

6044
来自专栏技术分享

WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能

最近的工作我在做一个有关于消息发送和接受封装工作。大概流程是这样的,消息中间件是采用rabbitmq,为了保证消息的绝对无丢失,我们需要在发送和接受前对消息进行...

2209

扫码关注云+社区