コード例 #1
0
ファイル: items.py プロジェクト: FD982459474/Web-spiders
class 慧聪网Item(scrapy.Item):
    actionConfigUtils = Store.take('慧聪网', SpidersConfigUitls(webName='慧聪网'))
    datas = actionConfigUtils.getDataCatch()
    for data in datas:
        exec(data['name'] + "=scrapy.Field()")
    _url = scrapy.Field()
    _catchTime = scrapy.Field()
コード例 #2
0
ファイル: crawlall.py プロジェクト: FD982459474/Web-spiders
    def run(self, args, opts):
        # 获取爬虫列表
        # spd_loader_list = self.crawler_process.spider_loader.list()  # 获取所有的爬虫文件。
        # 获取config.xml中的爬虫信息。
        actionConfigUtils = Store.take("actionConfigUtils",
                                       SpidersConfigUitls())
        for spname in actionConfigUtils.execs:
            self.crawler_process.crawl(spname['webName'], **opts.spargs)

        # for spname in spd_loader_list or args:
        #     #运行第一次爬虫
        #     # configUtils=Store.get(spname)
        #     # opts.spargs.setdefault(spname,configUtils)#给spider传递参数
        #     self.crawler_process.crawl(spname, **opts.spargs)

        self.crawler_process.start()
コード例 #3
0
class APyspiderSpider(CrawlSpider):
    name = '{{spiderName}}'
    config = Store.take(name, SpidersConfigUitls(webName=name))  # 在Stroue中创建一个对象。如果有就创建,没有就
    rules = config.getRules()
    allowed_domains = config.getAllowed_domains()
    start_urls = config.getStart_urls()
    PrintTool.print("爬虫"+name+"开始采集信息!!", fontColor="green")
    def __init__(self, *args, **kwargs):
        super(APyspiderSpider, self).__init__(*args, **kwargs)
    # def parse_item(self, response):
    #         self.myResponse=response
    #         # self.loadDate(response)
    #         datas=self.config.getDataCatch()
    #
    #         ##下面这串代码比较难理解。实际上是拼出了字符串。"GysPyspidersItem(公司名=self.公司名,地址=self.地址,固定电话=self.固定电话,主营产品=self.主营产品,客户=self.客户,手机号=self.手机号,公司网站 = self.公司网站,公司简介 =self.公司简介,电子邮箱 = self.电子邮箱,经营模式 = self.经营模式,企业类型 = self.企业类型,城市 = self.城市,公司规模 =self.公司规模,注册资本 = self.注册资本,来源网站= self.来源网站,信息获取的来源url= self.信息获取的来源url,记录时间= self.记录时间,)"
    #         ##并且这些字符串的获取都是从config配置文件中获取的。
    #         line="{{spiderName}}Item(_url=response.url,"
    #         for data in datas:
    #             line+=data['name']+"=self.selectElementStr('"+data['select']+"'),"
    #         line+=')'
    #         item=eval(line)
    #         print(self.name+"_爬虫 成功获得以下数据!!"+time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())+"\n",item)
    #         yield item
    #     #一般只要修改这里的数值就可以啦
    def parse_item(self, response):
        self.myResponse=response
        # self.loadDate(response)
        datas=self.config.getDataCatch()
        ##下面这串代码比较难理解。实际上是拼出了字符串。"GysPyspidersItem(公司名=self.公司名,地址=self.地址,固定电话=self.固定电话,主营产品=self.主营产品,客户=self.客户,手机号=self.手机号,公司网站 = self.公司网站,公司简介 =self.公司简介,电子邮箱 = self.电子邮箱,经营模式 = self.经营模式,企业类型 = self.企业类型,城市 = self.城市,公司规模 =self.公司规模,注册资本 = self.注册资本,来源网站= self.来源网站,信息获取的来源url= self.信息获取的来源url,记录时间= self.记录时间,)"
        ##并且这些字符串的获取都是从config配置文件中获取的。
        line="{{spiderName}}Item(_url=response.url,_catchTime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),"
        mode=""
        mutiplateArrs=[]
        for data in datas:
            if data.get('mode')=='mutiplate':
                mode='mutiplate'
                mutiplateArrs.append(data.get('name'))
            line += data['name'] + "=self.selectElementStr('" + data['select'] + "'," + str(data.get('mode')) + "),"
        line+=')'
        item=eval(line)
        #待优化
        sitekey=""
        if mode=='mutiplate':
            items = []
            itemMutiplateArr = {}
            for mutiplateArr in mutiplateArrs:
                itemMutiplateArr.setdefault(mutiplateArr, CommonUtils.changeStrToList(item[mutiplateArr]))
            for key in item.keys():
                if key in mutiplateArrs:
                    its=CommonUtils.changeStrToList(item[key])
                    for itf in its:
                        items.append({key:itf})
                    sitekey=key
                    break
            for i in range(len(items)):
                templates=[]
                for key1 in item.keys():
                    if key1 in mutiplateArr:
                        if key1!=sitekey:
                            try:
                                items[i].setdefault(key1,itemMutiplateArr[key1][i])
                            except:
                                raise ValueError("mutiplate的长度不一致!"+ items)
                    else:
                        items[i].setdefault(key1,item[key1])
            # 待优化
            for item in items:
                print(self.name + "_爬虫 成功获得以下数据!!" + time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()) + "\n",
                      item)
                yield item
        else:
            print(self.name+"_爬虫 成功获得以下数据!!"+time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())+"\n",item)
            print(item)
            yield item
        #一般只要修改这里的数值就可以啦
    def loadDate(self,response):##弃用!!!
        # print(self.configDocument)
        self['']
        self.公司名 = self.selectElementStr("#logoco > h1 > span")
        self.地址 = self.selectElementStr("#contact > div > dl > dd:nth-child(2)")
        self.固定电话 = self.selectElementStr("#contact > div > dl > dd:nth-child(4)")
        self.主营产品 = self.selectElementStr("#gongshang > div > table >  tr:nth-child(2) > td:nth-child(2)")
        self.客户 = self.selectElementStr("#contact > div > dl > dd:nth-child(6)")
        self.手机号 = self.selectElementStr("#contact > div > dl > dd:nth-child(8)")
        self.公司网站 = ""
        self.公司简介 = ""  # response.css("#aboutuscontent::text").extract()[0],
        self.电子邮箱 = self.selectElementStr("#contact > div > dl > dd:nth-child(10)")
        self.经营模式 = ""
        self.企业类型 = ""
        self.城市 = ""
        self.公司规模 = ""
        self.注册资本 = ""
        self.来源网站 = "顺企网"
        self.信息获取的来源url = response.url
        self.记录时间 = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())
    #只要取得选择器,就能获得这个选择器当中的所有文本
    def selectElementStr(self, selecterStr, mode):
        try:
            arr = self.myResponse.css(selecterStr).extract()
            if mode == "mutiplate":
                textArr = []
                if len(arr) > 1:
                    for text in arr:
                        if text.strip() != "":
                            newStr = re.sub(r'<!--[\s\S]*?-->', "", text).strip()
                            newStr = re.sub(r'<.*?>', "", newStr).strip()
                            textArr.append(newStr)
                    newStr = str(textArr)
                else:
                    newStr = re.sub(r'<.*?>', "", arr[0]).strip()
            else:
                if len(arr) > 1:
                    for text in arr:
                        if text.strip() != "":
                            newStr = re.sub(r'<.*?>', "", text).strip()
                            break
                else:
                    newStr = re.sub(r'<.*?>', "", arr[0]).strip()
        except:
            newStr = ""

        return newStr
コード例 #4
0
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
# 模板:替换位置:__spiderName__替换成spider的名称
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
from clientScrapySystem.webScrapySystem.GYS_pySpiders.Action import Store
from clientScrapySystem.webScrapySystem.GYS_pySpiders.utils.ConfigUtils_spider import SpidersConfigUitls
class {{spiderName}}Item(scrapy.Item):
    actionConfigUtils = Store.take('{{spiderName}}', SpidersConfigUitls(webName='{{spiderName}}'))
    datas=actionConfigUtils.getDataCatch()
    for data in datas:
        exec(data['name']+"=scrapy.Field()")
    _url=scrapy.Field()
    _catchTime=scrapy.Field()
    # 公司名 = scrapy.Field()
    # 地址 = scrapy.Field()
    # 固定电话 = scrapy.Field()
    # 主营产品 = scrapy.Field()
    # 客户= scrapy.Field()
    # 手机号 = scrapy.Field()
    # 公司网站= scrapy.Field()
    # 公司简介= scrapy.Field()
    # 电子邮箱= scrapy.Field()
    # 经营模式= scrapy.Field()
    # 企业类型= scrapy.Field()
    # 城市= scrapy.Field()
    # 公司规模= scrapy.Field()
    # 注册资本= scrapy.Field()
    # 来源网站= scrapy.Field()
    # 记录时间= scrapy.Field()
コード例 #5
0
# This package will contain the spiders of your Scrapy project
#
# Please refer to the documentation for information on how to create and manage
# your spiders.
# 判断是否config.xml中需要被执行的spider是否存在,如果不存在则在template文件夹下面的的spider_template.py为模板创建,一个新
# 的spider。名字按照name命名
"""
根据配置文件中的爬虫项目,动态创建爬虫。根据模板创建(template/spider_template.py)。创建在本文件夹下面。
"""
import re
from clientScrapySystem.webScrapySystem.GYS_pySpiders.Action import Store
from clientScrapySystem.webScrapySystem.GYS_pySpiders.utils.ConfigUtils_spider import SpidersConfigUitls
import os
#获取其初始化配置文件(如果没有,则创建一个新的配置文件)
actionConfigUtils=Store.take("actionConfigUtils",SpidersConfigUitls())
#获取当前目录下(spider文件)所有的文件的工作路径。并保存在filePaths这个数组中 e.g['GYS_pySpiders/spiders/Spider_招商100.py', 'GYS_pySpiders/spiders/Spider_顺企网.py', 'GYS_pySpiders/spiders/__init__.py']
filePaths=[]
#获取当前目录下(spider文件)所有spider的name属性名 e.g:['招商100', '顺企网']
spiderNameFiles = []
for root, dirs, files in os.walk("GYS_pySpiders/spiders"):
    filePaths=list(map(lambda x:root+'/'+x,files))
    break
#读取spider文件下面所有spider文件(除了_init_.py文件)。并通过os流读取其spider的名称。并保存在spiderNameFiles数组中
for filePath in filePaths:
    files=open(mode='r',file=filePath,encoding='utf-8')
    lines=files.readlines()
        #存放了所有spider的名称
    for line in lines:
        if line.find('name')!=-1:
            newLine=line.strip().replace(' ','')
            if newLine.startswith("name="):