Scrapy 通用爬虫爬取广西人才网数据记录(上,企业信息)

五迷三道 提交于 2019-12-07 12:24:22

背景

这一次的通用爬虫跟以往默认的spider不一样,它的爬取可以通过正则将范围扩大,而且它也不注重那么细的内容,能爬尽量爬、不能爬就略过的思维,比较有意思。


独特之处

它的独特性主要表现在这几个地方:

  • 模板与默认爬虫模板不一样,在创建默认工程时用的命令是 scrapi genspider gxrc www.gxrc.com,而通用爬虫在创建工程时用的命令则是 scrapi genspider -t crawl gxrc www.gxrc.com,意思是指定crawl模板。
  • 配置要求不同,因为大规模爬取数据一般都是无需登录的网站,而且根据略过思维,对于重定向和超时还有爬取日志以及并发数、cookie禁用都是提供了配置,这些在官方文档都有记录

Follow的坑

  • 我在开始爬取的过程中,因为不太熟悉crawlspider的follow规则,所以绕了几次弯路,后来才熟悉:
  • follow只跟进当前页面的url,(符合Rule正则的都跟进)
  • follow不会自动跟进全站url,因为第一条的存在,所以它是不会自动跟进全站的
  • Rule是个坑,strat_urls更加是个坑。

广西人才网

它也是很独特的,为什么这么描述呢:

  • 它在首页呈现的企业信息没多少,所以如果将首页url设置为start_urls,那么根据follow的坑,肯定是不能够全部抓取的。
  • 如果是进入子分类,比如能源行业、汽车行业、金融行业,那也是不行的,子类太多,而且子类进去以后也是单页仅仅显示10-20条企业信息,follow跟进这十几条数据后没有东西跟进,爬虫就会自动停止 finish
  • 那就必须找到所有企业的列表,然后根据列表进行翻页(其实跟之前的默认spider思路一样)

找企业列表

根据广西人才网的功能设定,要找到所有企业的列表,只需要在搜索栏处设定搜索范围为【公司】、选择城市【广西】,其他默认,点击搜索按钮【找工作】, 在所列出来的列表下方的翻页处点击任意页码,在浏览器获得页码url

http://s.gxrc.com/sEnt?schType=2&page=816

这样就可以构造页码了。


代码实现

spider代码里面主要是设置allowed_domains、start_urls、Rule和字段的获取:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from ..items import GxrcItem,GxrcItemLoader


class GxrcSpider(CrawlSpider):
    name = 'gxrc'
    allowed_domains = ['www.gxrc.com']  # 正式的企业信息url是在www域名下,而不是下方s_urls的s域名下,所以这里依然用www
    start_urls = []
    for i in range(1, 815):
        """ 
            根据广西人才网页码范围  获取具体的企业列表 
                将url加入start_urls的列表,由scrapy自动取值进行爬取
        """ 
        i = str(i)
        s_urls = "http://s.gxrc.com/sEnt?schType=2&district=1&page= %s" % (i)
        start_urls.append(s_urls)

    rules = (
        Rule(LinkExtractor(allow=r'/WebPage/JobDetail.aspx\?EnterpriseID=\d+$'),follow=True,callback='parse_company'),  # 设定url正则,符合正则的则进行爬取
      
    )

item里面主要是对进来的数据进行处理,比如去空格/去换行、提取数字、加密等:


import scrapy
import re
from scrapy.loader import ItemLoader
from scrapy.loader.processors import TakeFirst,MapCompose,Join


""" 开始:定义数据处理方法 """


def do_strip(value):
    """ 去空格/换行 """
    return value.strip()


def keep_list(value):
    """
    scrapy的图片下载url默认处理列表list格式,str会报错
        由于下方itemloaders设置了default_output_processor为TakeFirst
        所以这里需要定义一个直接返回的函数来覆盖output_processor,这样就可以保持list格式
    """
    return value


def get_url_id(value):
    """ 将url中的数字取出来 """
    match = re.search('\d+', value)
    if match:
        value = match.group(0)
    return int(value)

""" 结束:定义数据处理方法 """


class GxrcItemLoader(ItemLoader):
    """ 广西人才网企业信息itemloader """
    default_output_processor = TakeFirst()


class GxrcItem(scrapy.Item):
    """ 广西人才网企业信息item序列化"""
    comp_url = scrapy.Field()
    comp_url_id = scrapy.Field(input_processor=MapCompose(get_url_id))
    comp_name = scrapy.Field(input_processor=MapCompose(do_strip))
    comp_desc = scrapy.Field(input_processor=MapCompose(do_strip))
    comp_tel = scrapy.Field()
    comp_contacts = scrapy.Field(input_processor=MapCompose(do_strip))
    comp_email = scrapy.Field(input_processor=MapCompose(do_strip))
    comp_website = scrapy.Field(input_processor=MapCompose(do_strip))
    comp_address = scrapy.Field(input_processor=MapCompose(do_strip))
    image_urls = scrapy.Field(output_processor=MapCompose(keep_list))
    image_path = scrapy.Field()

这一次在pipeline中要处理的事情比较多:

  • 下载图片
  • 自动识别图片中的电话号码
  • 将数据持久化,存储到Json文件中

这里就不公开处理的代码了,写完pipeline之后记得到settings中开启即可


settings配置

上面我写了scrapy为crawlspider提供了很多的配置,以加速下载,完成【能爬则爬,不能则略过】的行为,在settings.py中新增配置代码:

""" 通用爬虫优化配置 """
#REDIRECT_ENABLED = False  # 禁止重定向
DOWNLOAD_TIMEOUT = 15  # 减小下载超时
RETRY_ENABLED = False  # 禁用重试
COOKIES_ENABLED = False  # 禁止cookie
CONCURRENT_REQUESTS = 200  # 增加全局并发数
LOG_LEVEL = 'INFO'  # 降低log日志记录的级别 (如果设置这个,那爬取时候除了报错外,其他信息是看不到的)

其中重点是【重定向】、【日志】和【并发】:

  • 【重定向】 -- 它的目的是为了节省请求次数和爬取时间,对于重定向的目标做后置处理(除非您对跟进重定向感兴趣,否则请考虑关闭重定向。 当进行通用爬取时,一般的做法是保存重定向的地址,并在之后的爬取进行解析。 这保证了每批爬取的request数目在一定的数量, 否则重定向循环可能会导致爬虫在某个站点耗费过多资源。)
  • 【日志】 -- 它的目的是减少爬取时候的cpu开销和内存开销,能不记录的则不记录,如果设置了INFO级别,则只会显示DEBUG级别的信息及错误信息,一条条的爬取记录就不会显示了。
  • 【并发】 -- 它可以增加并发数量,一般来讲scrapy默认并发数32,文档里面写着并发可以先设定为100,根据cpu的占用率提高数值,最好的并发是占用cpu80%左右。我这里设置200才占用了40%的cpu。

这里我不能开启重定向,是因为广西人才网的企业列表是s,而真正的企业详情是www,它自动给了一个302的重定向,如果我开启了重定向,那么这里就会取不到任何的数据和信息,如果我不开启则能够正常取数据。


数据展示

这里展示一下抓取到的8000多条数据中的一小部分:

{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1100420", "comp_url_id": 1100420, "comp_name": "广西剑桥教育管理有限责任公司", "comp_desc": "闻名的剑桥:剑桥大学是全世界最顶尖的大学之一,产生了近百名的诺贝尔奖获得者,更是许多英国、欧洲及世界著名的科学家、作家、政治家诞生地。广西剑桥致力于传播剑桥大学的教育理念、教育思想、教育模式和教育方法,让更多中国人能站在世界民族之林和世界舞台做出卓越的成就而努力。", "comp_contacts": "张老师", "comp_email": "cambridge@163.com", "comp_website": "www.cambridge.org.cn", "comp_address": "广西大学正门城市便捷酒店8楼  三美分校:南宁三美学校对面城市便捷酒店10楼", "image_urls": ["http://vip.gxrc.com/Public/Phone/97C1B456-BBA0-4665-942A-AA39F7FA7653"], "image_path": "full/075d4d696a8ed286bd468a8fd4973034a8f0e3f6.jpg", "comp_tel": "07717\n\n \n\n313139"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1097914", "comp_url_id": 1097914, "comp_name": "南宁联发置业有限公司", "comp_desc": "联发集团有限公司成立于1983年10月,是一家以房地产和物业租赁为核心业务的大型房地产运营商,现注册资本21亿元人民币,总资产240亿元人民币,开发区域已涵盖厦门、桂林、南昌、南宁、重庆、武汉、天津、扬州、鄂州、漳州和莆田。公司肩负开发厦门经济特区的使命而生,伴随特区共同成长,并积极拓展全国版图。30多年来,公司坚守品质筑家的理想,与城市发展同行,根植十余城,为无数家庭营造超越不动产价值的幸福体验,融入并推动所在城市的提升与繁荣。截至目前,公司开发面积近1000万㎡,并拥有土地储备超600万㎡,同时已形成快速滚动发展与自主运营相结合的合理布局,持有物业面积超80万㎡。", "comp_email": "wlz@xudc.com", "comp_website": "www.lianfafc.cn", "comp_address": "南宁市青秀区长虹路12号", "image_urls": ["http://vip.gxrc.com/Public/Phone/C7A34103-9443-4513-A477-E5CDC5C0EC38"], "image_path": "full/8c2737cadc3184486c72c086f427d2339ea41eed.jpg", "comp_tel": ""}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=20671", "comp_url_id": 20671, "comp_name": "广西海格国际物流有限公司", "comp_desc": "广西海格国际物流有限公司总部设在南宁,隶属于深圳海格物流,在防城港、钦州、贵港等地设有分支机构,依托深圳海格雄厚实力和覆盖网络,利用北部湾港作为西南地区出海通道的优势,成立伊始,便以高起点、高定位、高品质为广大客户提国际国内海运、拖车、仓储、省内市内配送、多式联运、报关报检、船舶代理等物流服务,是北部湾港和西江水域等口岸最大的外贸进出口承运商,拥有多年国际危险品货运(赤磷、黄磷、磷酸等)和冷冻柜的专业操作经验,能够为西南地区各行业客户提供国内国际物流全程运作服务。", "comp_contacts": "丰小姐", "comp_email": "fengpingting@hercules-logistics.com", "comp_website": "www.hercules-logistics.com", "comp_address": "南宁市高新区总部路3号东盟企业总部基地2期8栋5楼", "image_urls": ["http://vip.gxrc.com/Public/Phone/F9494EC8-6AE7-49F5-92B3-F30AC043949A"], "image_path": "full/4d752b67bfce07ab3a7b2dadd9790c0ef39655c3.jpg", "comp_tel": "077172260666 , sass"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1103676", "comp_url_id": 1103676, "comp_name": "广西金汇通混凝土有限公司", "comp_desc": "广西金汇通混凝土有限公司是一家专业从事预拌商品混凝土生产和销售的企业,也是一家安全生产标准化三级企业,公司于2003 年1月3日正式注册成立,注册资金为3000万元人民币,净资产8576万元人民币,公司周转资金雄厚,资质类别为“预拌混凝土专业承包不分等级”。", "comp_contacts": "张主任", "comp_email": "175060534@qq.com", "comp_address": "广西南宁市兴宁区昆仑大道118号(金桥客运站附近22\\606\\803公交车到新城福利厂站下车即可)", "image_urls": ["http://vip.gxrc.com/Public/Phone/DECB268C-9941-4098-B28C-DF5D52FB0293"], "image_path": "full/15eb7a63d6a6b0dd9d1358d553c1f7bb2306ee30.jpg", "comp_tel": "6661936 15373199715"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1103412", "comp_url_id": 1103412, "comp_name": "柳城加美木业有限公司", "comp_desc": "柳城加美木业有限公司位于广西“龙城”柳州市柳城沙埔经济开发区,成立于2011年2月,注册资金4000万元人民币,总投资2.2亿元人民币,建筑面积23629m2,占地120亩,是柳城县招商局重点建设项目。公司临近拥有丰富林业资源的融安县、融水县、三江县,占据优越的地理位置。", "comp_contacts": "人力资源部 廖主管", "comp_email": "lcjmmy7012889@163.com", "comp_website": "www.lzjmjt.com/", "comp_address": "广西柳州市柳城沙埔工业园", "image_urls": ["http://vip.gxrc.com/Public/Phone/4386C8BC-42A6-471A-B899-F1F5AD0FEC79"], "image_path": "full/d72a375051cc0397188691cd97fd7a38effa9091.jpg", "comp_tel": "077277012339"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1103727", "comp_url_id": 1103727, "comp_name": "南宁市西乡塘区浩艺文化教育培训学校", "comp_desc": "我培训学校是经教育局批准成立的一所集音乐、舞蹈、美术等多个综合项目培训的民办学校,招生对象少儿、成人,学校自成立以来“以育人为本”的办学理念,坚持“诚信、严谨、规范、创新”的校风,培养学生学习的兴趣,提高增强学生的综合素质。学校的师资具有严谨的教学态度、丰富的教学经验,拥有高度的责任心和爱心,学校管理水平规范化、系统化,是学子们求学的理想校园。", "comp_contacts": "林老师", "comp_address": "南宁市秀灵路88号(广西大学东门对面,香格里拉小区)", "image_urls": ["http://vip.gxrc.com/Public/Phone/0D59F931-5B5B-4383-886E-0523EE047511"], "image_path": "full/bc435e76ed065cb62c894ca721cd33ab42eeabe7.jpg", "comp_tel": "077173293673"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=14361", "comp_url_id": 14361, "comp_name": "广西金源置业集团有限公司", "comp_desc": "广西金源置业集团(简称- 金源集团)成立于2006年。前身为创立于1995年7月的广西金源房地产开发有限公司。截止2015年底,金源集团总资产约45亿元人民币,下辖20多个全资或控股子公司,拥有员工1200多人。集团现在正在开发及储备项目建筑面积逾200万平方米,下辖子公司经营多个汽车品牌,是一家以房地产经营管理为主业,兼营汽车销售服务及项目投资管理的大型集团公司。", "comp_contacts": "胡小姐、李小姐", "comp_email": "jinyuan@gxjyfdc.com", "comp_website": "www.gxjyfdc.com", "comp_address": "广西南宁市金湖路63号金源CBD现代城28楼", "image_urls": ["http://vip.gxrc.com/Public/Phone/20BF56B4-FC14-4755-A514-685DBDBF45D6"], "image_path": "full/0b70fc72a7720f8b7260dd01690c28a677143c80.jpg", "comp_tel": "077175523000"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=57524", "comp_url_id": 57524, "comp_name": "广西师范学院师园学院", "comp_desc": "广西师范学院师园学院简介", "comp_contacts": "吴老师、蒙老师", "comp_website": "www.gxsyu.com/", "comp_address": "南宁市明阳工业区明阳大道15号", "image_urls": ["http://vip.gxrc.com/Public/Phone/CDCE4896-7774-4073-A750-0E5039220979"], "image_path": "full/9a14fcb7623869aea330b61c1c51c00ea58249c0.jpg", "comp_tel": "077173 191165"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1102941", "comp_url_id": 1102941, "comp_name": "桂林众阳光能科技有限责任公司", "comp_desc": "浙江众阳集团是一家综合性集团企业,主要涉足行业有:水泥、商品混凝土、商品砂浆、耐磨材料、体育文化娱乐、煤炭贸易、仓储物流等。公司总资产8.3亿元,年销售收入超过15亿元,是历年诸暨市规模企业;并入围“浙商全国500强”榜单,2009年排名第308位,2010年排名第291位,2011年排名第254位,2012年排名第253位。", "comp_contacts": "王先生", "comp_website": "http;//www.zhongyanggroup.com.cn", "comp_address": "广西桂林市临桂县秧塘工业园秧十八路", "image_urls": ["http://vip.gxrc.com/Public/Phone/A39BCBE7-6E18-4628-ACCC-EFF6AE37084E"], "image_path": "full/9865653b4b22fe11151b78543bdddd416defd75f.jpg", "comp_tel": "077373663600"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1104818", "comp_url_id": 1104818, "comp_name": "广西金步电力科技有限公司", "comp_desc": "广西金步电力科技有限公司坐落在“东盟博览会”永久举办地——中国南宁,位于南宁国家经济技术开发区。公司成立于2011年,注册资金3100万元,是一家专业从事电表箱、配电箱、开关柜、低压无功补偿等高低压成套设备及新能源配套产品的研发、生产、销售及服务于一体的现代化企业。", "comp_contacts": "陈小姐", "comp_website": "www.jinbudl.com/", "comp_address": "南宁市江南区南站大道与沙井大道交界银凯工业园洪胜路7号", "image_urls": ["http://vip.gxrc.com/Public/Phone/260D8BBD-3B16-44CE-AA47-0C4E8E530C92"], "image_path": "full/014df6b88057b02ca40d5e208bb406d100fc8721.jpg", "comp_tel": "077174739266"}


{"comp_url": "http://www.gxrc.com/WebPage/Company.aspx?EnterpriseID=1105150", "comp_url_id": 1105150, "comp_name": "广西创致实业股份有限公司", "comp_desc": "广西创致实业股份有限公司始创于2004年,2015年11月30日由玉林市创致电器销售有限公司整体变更而来,公司股本7000万元。", "comp_contacts": "高小姐", "comp_email": "3099934559@qq.com", "comp_website": "www.gxchuangzhi.com", "comp_address": "广西壮族自治区玉林市清宁路254-258号", "image_urls": ["http://vip.gxrc.com/Public/Phone/DB83CBCC-53EF-413D-B594-E1AC8D0392CE"], "image_path": "full/f5bdc2d427fe266ed45f17bcc1091f0bb6ecdfc7.jpg", "comp_tel": "077572036119"}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!