一、介绍

    本例子用scrapy-splash抓取活动树网站给定关键字抓取活动信息。

    给定关键字:数字;融合;电视

    抓取信息内如下:

      1、资讯标题

      2、资讯链接

      3、资讯时间

      4、资讯来源

  二、网站信息

    

    

      

  三、数据抓取

    针对上面的网站信息,来进行抓取

    1、首先抓取信息列表

      抓取代码:sels = site.xpath("//div[@id ='eventList']/div[@class ='list']")

    2、抓取标题

      抓取代码:title = str(sel.xpath('.//div[2]/h2/a/text()')[0].extract())

    3、抓取链接

      抓取代码:url = 'http://www.huodongshu.com' + str(sel.xpath('.//div[1]/a/@href')[0].extract())

    4、抓取日期

      抓取代码:dates = sel.xpath('.//div[@class="info time"]/text()')

    5、抓取来源

      抓取代码:sources = sel.xpath('.//div[@class="info title"]/a/text()')

    6、地点

      抓取代码:areas = sel.xpath('.//div[@class="info site"]/text()')

  

  四、完整代码

# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
from scrapy.spiders import Spider
from scrapy_splash import SplashRequest
from scrapy_splash import SplashMiddleware
from scrapy.http import Request, HtmlResponse
from scrapy.selector import Selector
from scrapy_splash import SplashRequest
from splash_test.items import SplashMeetingItem
import IniFile
import sys
import os
import re
import time reload(sys)
sys.setdefaultencoding('utf-8')
import urllib
# sys.stdout = open('output.txt', 'w') class huodongshuSpider(Spider):
name = 'huodongshu' configfile = os.path.join(os.getcwd(), 'splash_test\spiders\setting.conf') cf = IniFile.ConfigFile(configfile)
meeting_wordlist = cf.GetValue("section", "meeting_keywords").split(';')
websearch_url = cf.GetValue("huodongshu", "websearchurl")
start_urls = []
for keyword in meeting_wordlist:
url = websearch_url +keyword
start_urls.append(url)
# request需要封装成SplashRequest
def start_requests(self):
for url in self.start_urls:
index = url.rfind('=')
yield SplashRequest(url
, self.parse
, args={'wait': ''},
meta={'keyword': url[index + 1:]}
) def compareDate(self, dateLeft, dateRight):
'''
比较俩个日期的大小
:param dateLeft: 日期 格式2017-03-04
:param dateRight:日期 格式2017-03-04
:return: 1:左大于右,0:相等,-1:左小于右
'''
dls = dateLeft.split('-')
drs = dateRight.split('-')
if len(dls) > len(drs):
return 1
if int(dls[0]) == int(drs[0]) and int(dls[1]) == int(drs[1]) and int(dls[2]) == int(drs[2]):
return 0 if int(dls[0]) > int(drs[0]):
return 1
elif int(dls[0]) == int(drs[0]) and int(dls[1]) > int(drs[1]):
return 1
elif int(dls[0]) == int(drs[0]) and int(dls[1]) == int(drs[1]) and int(dls[2]) > int(drs[2]):
return 1
return -1 def date_isValid(self, strDateText):
'''
判断日期时间字符串是否合法:如果给定时间大于当前时间是合法,或者说当前时间给定的范围内
:param strDateText: 三种格式 '2017.04.27 ~ 04.28'; '2017.04.20 08:30 ~ 12:30' ; '2015.12.29 ~ 2016.01.03'
:return: True:合法;False:不合法
'''
datePattern = re.compile(r'\d{4}-\d{2}-\d{2}')
date = strDateText.replace('.', '-')
strDate = re.findall(datePattern, date)
currentDate = time.strftime('%Y-%m-%d')
flag = False
startdate = ''
enddate = ''
if len(strDate) == 2:
if self.compareDate(strDate[1], currentDate) > 0:
flag = True
startdate = strDate[0]
enddate = strDate[1]
elif len(strDate) == 1:
# 2017.07.13 ~ 07.15
if date.find(':') > 0:
if self.compareDate(strDate[0], currentDate) >= 0:
flag = True
startdate = strDate[0]
enddate = strDate[0]
else:
startdate = strDate[0]
enddate = date[0:5] + date[len(date) - 5:]
if self.compareDate(enddate, currentDate) >= 0:
flag = True
return flag, startdate, enddate def parse(self, response):
site = Selector(response)
sels = site.xpath("//div[@id ='eventList']/div[@class ='list']")
keyword = response.meta['keyword']
it_list = [] for sel in sels:
dates = sel.xpath('.//div[@class="info time"]/text()') if len(dates) > 0:
strdate = str(dates[0].extract())
flag, startdate, enddate = self.date_isValid(strdate) if flag:
title = str(sel.xpath('.//div[2]/h2/a/text()')[0].extract())
if title.find(keyword) > -1:
url = 'http://www.huodongshu.com' + str(sel.xpath('.//div[1]/a/@href')[0].extract())
it = SplashMeetingItem()
it['title'] = title
it['url'] = url
it['date'] = strdate
it['startdate'] = startdate
it['enddate'] = enddate
it['keyword'] = keyword
areas = sel.xpath('.//div[@class="info site"]/text()')
if len(areas) > 0:
it['area']=areas[0].extract()
sources = sel.xpath('.//div[@class="info title"]/a/text()')
if len(sources)>0:
it['source'] = sources[0].extract()
it_list.append(it)
return it_list

scrapy-splash抓取动态数据例子十一的更多相关文章

  1. scrapy-splash抓取动态数据例子一

    目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...

  2. scrapy-splash抓取动态数据例子八

    一.介绍 本例子用scrapy-splash抓取界面网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...

  3. scrapy-splash抓取动态数据例子七

    一.介绍 本例子用scrapy-splash抓取36氪网站给定关键字抓取咨询信息. 给定关键字:个性化:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  4. scrapy-splash抓取动态数据例子六

    一.介绍 本例子用scrapy-splash抓取中广互联网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  5. scrapy-splash抓取动态数据例子五

    一.介绍 本例子用scrapy-splash抓取智能电视网网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站 ...

  6. scrapy-splash抓取动态数据例子四

    一.介绍 本例子用scrapy-splash抓取微众圈网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信息 ...

  7. scrapy-splash抓取动态数据例子三

    一.介绍 本例子用scrapy-splash抓取今日头条网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  8. scrapy-splash抓取动态数据例子二

    一.介绍 本例子用scrapy-splash抓取一点资讯网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...

  9. scrapy-splash抓取动态数据例子十六

    一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息,输入给定关键字抓取微信资讯信息. 给定关键字:数字:融合:电 ...

随机推荐

  1. Git-cheatsheet

  2. 在opensuse 中安装视频解码器

    最近由于需要32位的linux系统使用,很多版本的linux都不再发布32的安装镜像了,有一些又不是很熟悉,我熟悉的manjaro发布的32镜像又不是kde桌面,最后发现opensuse的滚动版本,即 ...

  3. win7中下载和安装redis

    下载地址:https://github.com/MicrosoftArchive/redis/releases 这里我下载的是3.2.100版本,下载zip,然后解压.解压后如图所示: 开启redis ...

  4. javascript中a标签把href属性设置为“javascript:void(0)”还是会打开空白页面的问题

    在项目中有个位置的点击a标签这里要加一个权限判断,但是之前使用的是js动态添加a标签,href的属性值是一个url,但是我要做权限判断之后,我的url就不能设置在href属性中了,这样的话我可以在a标 ...

  5. 【python】python2.x 与 python3.x区别对照+缩进错误解决方法

    仅仅列出我用到的,不全. 划重点: 1. urllib2 用 urllib.request 代替 2. urllib.urlencode 用 urllib.parse.urlencode 代替 3. ...

  6. 服务器老是出现502 Bad Gateway?

    给你的upstream增加keepalive配置没有? upstream backend { server http://127.0.0.1:8888; keepalive 32; } 在nginx和 ...

  7. thinkphp5最美跳转页面

    声明下:此教程来自TP官网,如果需要看原文,请点击一下链接   http://www.thinkphp.cn/code/3437.html 先给大家看下效果: 直接撸代码: 第一步:为了增加对移动设备 ...

  8. Problem B: 英雄无敌3(2)【模拟,日期转换】

    Problem B: 英雄无敌3(2) Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 295  Solved: 52[Submit][Status][W ...

  9. IBM-Club IntelliJ IDEA 开发环境的安装

    各位小伙伴初次使用IDE,可能还是有许多疑惑,因此这篇博客阿鲁给大家分享一下,自己平时是如何安装IntelliJ IDEA的 1.原料:安装包,直接百度搜索进入官网下载 记住是Ultimate版本呦, ...

  10. 模板-网络流-Dinic

    //Dinic struct Edge{ int from,to,cap,flow; Edge(){ } Edge(int a,int b,int c,int d){ from=a; to=b; ca ...