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

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

使用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 条评论
登录 后参与评论

相关文章

来自专栏知识分享

9-开发板接入小五物联实现远程控制(Wi-Fi模块)

这一节为教程最终版功能演示,现在不必深究,早晚自己全部都会实现的(静静的跟着我学哈)

1622
来自专栏python爬虫实战之路

12306自动刷票下单-下单

进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc

2045
来自专栏Danny的专栏

jsp实现分页显示记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1.2K3
来自专栏Netkiller

高级运维工程师面试题(更新中)

高级运维工程师 服务器硬件 RAID 磁盘阵列 简述 RAID? RAID 0 5 6 10 50 都适用于那些场景? 数据库适用那种 RAID? RAID 1...

7024
来自专栏Hadoop实操

如何在HP dl380 Gen9服务器上安装Redhat 7.2并配置软RAID

在《如何为服务器硬盘配置RAID或JBOD模式》一文中提到,单张RAID卡无法同时启用RAID模式和JBOD模式,即无法混合管理,如果RAID卡为所有硬盘配置了...

1K3
来自专栏后端云

Doctor framework

Openstack社区一直没有专门的VM HA的组件来支持VM HA,所以各个厂商有这个需要都自己开发。

854
来自专栏cs

python下载小说

1954
来自专栏WindCoder

自用插件整理之表格bootstrap-table

本插件基于bootstrap,网上各种例子也比较多,本文就不详细列api一类的了,只将自己常用的记录一下。多数代码中存在的注释,就不再重写。

6891
来自专栏专注研发

PageHelper分页插件及通用分页js

物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的...

2831
来自专栏肖洒的博客

【爬虫】(一):爬网页、爬图片、自动登录

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。 用于从WWW服务器传输超文本到本地浏览器的传送协议。

1273

扫码关注云+社区