scrapy爬虫实例(1)
爬虫实例
对象 阳光问政平台
目标 : 主题,时间,内容
爬取思路
- 预先设置好items
 
import scrapy
class SuperspiderItem(scrapy.Item):
    title = scrapy.Field()
    date = scrapy.Field()
    content = scrapy.Field()
- 爬取范围和start_url
 
class Spider1Spider(scrapy.Spider):
    name = 'spider1'
    allowed_domains = ['http://wz.sun0769.com/']
    start_urls = ['http://wz.sun0769.com/html/top/report.shtml']
- parse实现三大大功能抓取具体内容url链接和下一页url链接,并提取title和date
 
    def parse(self, response):
        tr_list = response.xpath("//div[@class='newsHead clearfix']/table[2]//tr")
        for tr in tr_list:
            items = SuperspiderItem()
            items['title'] = tr.xpath("./td[3]/a[1]/@title").extract_first()  ##### 提取title  用xpath
            items['date'] = tr.xpath("./td[6]//text()").extract_first()    #### 同样的方法提取date
            content_href = tr.xpath("./td[3]/a[1]/@href").extract_first()   #### 提取内容链接
  ####---将提取的内容链接交给下一个函数,并将date和title也交给下一个函数最终数据统一处理---#########
  ####---有关yiled----####----content_url传url链接,callback指定回调函数----####
            yield scrapy.Request(
                content_href,
                callback=self.get_content,
     ####----meta-可以将数据转移----####
     ####----一个类字典的数据类型----####
                meta={
                    'date': items['date'],
                    'title': items['title']
                      }
            )
        new_url = response.xpath("//div[contains(@align,'center')]//@href").extract()
        print(new_url[-2])
        if "page="+str(page_num*30) not in new_url[-2]:
   ####---指明爬取的页数---####
            yield scrapy.Request(
                new_url[-2],
                callback=self.parse
            )
- 第二个函数
-汇集所有的函数并 传给piplines 
    def get_content(self, response):
        items = SuperspiderItem()
        items['date'] = response.meta['date']
        items['title'] = response.meta['title']
        items['content'] = response.xpath("//td[@class='txt16_3']/text()").extract_first()
        yield items
- piplines里面并没做什么.因为没对数据进行什么处理,只是简单的将数据打印
 
class SuperspiderPipeline(object):
    def process_item(self, item, spider):
        items = item
        print('*'*100)
        print(items['date'])
        print(items['title'])
        print(items['content'])
完整代码
- items里面的部分
 
import scrapy
class SuperspiderItem(scrapy.Item):
    title = scrapy.Field()
    date = scrapy.Field()
    content = scrapy.Field()
- spider代码
 
# -*- coding: utf-8 -*-
import scrapy
from superspider.items import SuperspiderItem
page_num = 3
class Spider1Spider(scrapy.Spider):
    name = 'spider1'
    allowed_domains = ['wz.sun0769.com']
    start_urls = ['http://wz.sun0769.com/html/top/report.shtml']
    def parse(self, response):
        tr_list = response.xpath("//div[@class='newsHead clearfix']/table[2]//tr")
        for tr in tr_list:
            items = SuperspiderItem()
            items['title'] = tr.xpath("./td[3]/a[1]/@title").extract_first()
            items['date'] = tr.xpath("./td[6]//text()").extract_first()
            content_href = tr.xpath("./td[3]/a[1]/@href").extract_first()
            yield scrapy.Request(
                content_href,
                callback=self.get_content,
                meta={
                    'date': items['date'],
                    'title': items['title']
                      }
            )
        new_url = response.xpath("//div[contains(@align,'center')]//@href").extract()
        print(new_url[-2])
        if "page="+str(page_num*30) not in new_url[-2]:
            yield scrapy.Request(
                new_url[-2],
                callback=self.parse
            )
    def get_content(self, response):
        items = SuperspiderItem()
        items['date'] = response.meta['date']
        items['title'] = response.meta['title']
        items['content'] = response.xpath("//td[@class='txt16_3']/text()").extract_first()
        yield items
- piplines代码
 
class SuperspiderPipeline(object):
    def process_item(self, item, spider):
        items = item
        print('*'*100)
        print(items['date'])
        print(items['title'])
        print(items['content'])
中间遇到的问题
- 爬取范围写错而日志等级又设置为warning,导致找不出问题
 - yield相关内容不清楚
 - 要先导入并初始化一个
SuperspiderItem()(加括号) - piplines中不需要导入
SuperspiderItem() - extract()忘写
 - xpath:
//div[contains(@align,'center')注意写法- 找到一篇xpath定位的博文
 
 
scrapy爬虫实例(1)的更多相关文章
- 简单scrapy爬虫实例
		
简单scrapy爬虫实例 流程分析 抓取内容:网站课程 页面:https://edu.hellobi.com 数据:课程名.课程链接及学习人数 观察页面url变化规律以及页面源代码帮助我们获取所有数据 ...
 - Scrapy爬虫实例——校花网
		
学习爬虫有一段时间了,今天使用Scrapy框架将校花网的图片爬取到本地.Scrapy爬虫框架相对于使用requests库进行网页的爬取,拥有更高的性能. Scrapy官方定义:Scrapy是用于抓取网 ...
 - Scrapy爬虫实例教程(二)---数据存入MySQL
		
书接上回 实例教程(一) 本文将详细描述使用scrapy爬去左岸读书所有文章并存入本地MySql数据库中,文中所有操作都是建立在scrapy已经配置完毕,并且系统中已经安装了Mysql数据库(有权限操 ...
 - Scrapy 爬虫实例教程(一)---简介及资源列表
		
Scrapy(官网 http://scrapy.org/)是一款功能强大的,用户可定制的网络爬虫软件包.其官方描述称:" Scrapy is a fast high-level screen ...
 - python scrapy 爬虫实例
		
1 创建一个项目 scrapy startproject basicbudejie 2 编写爬虫 import scrapy class Basicbudejie(scrapy.Spider): na ...
 - Python Scrapy 爬虫框架实例(一)
		
之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...
 - Python Scrapy 爬虫框架实例
		
之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...
 - 转:Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)
		
Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...
 - Scrapy安装、爬虫入门教程、爬虫实例(豆瓣电影爬虫)
		
Scrapy在window上的安装教程见下面的链接:Scrapy安装教程 上述安装教程已实践,可行.(本来打算在ubuntu上安装Scrapy的,但是Ubuntu 磁盘空间太少了,还没扩展磁盘空间,所 ...
 
随机推荐
- LeetCode#1047-Remove All Adjacent Duplicates In String-删除字符串中的所有相邻重复项
			
一.题目 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们. 在 S 上反复执行重复项删除操作,直到无法继续删除. 在完成所有重复项删除操作后返回最终的字符串.答案 ...
 - 从零搭建一个SpringCloud项目之Feign搭建
			
从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要 ...
 - Sql练习201908200916
			
表结构: 一条sql修改多条数据(Sql server),oracle,mysql请自行尝试: ; go 完成.
 - STL之sstream的用法
			
STL之sstream的用法 说在前面: 库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输出操作.另外,每个类都有一 ...
 - Codeforces Global Round 7
			
A. Bad Ugly Numbers 思路 题意: 给我们一个k,让我们用 0-9 之间的数字构成一个 k位数a,a不能被组成a的每一位数字整除. 分析:首先 k等于1,无论我们怎么配都会被整除:当 ...
 - Coding 是门技术
			
今天的分享来源于工作中的点点滴滴…… 01. 习惯性自嘲 代码写久了,伴随肩疼头痛眼近视,于是乎也就成了名副其实的 code farmer(码农),作为如牛吃草挤奶般的码农,吃草(撸)挤奶(码)便是日 ...
 - LINUX解压缩 zip文件
			
压缩当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip xxx.zip
 - Maybatis的一些总结(二:基本使用过程)
			
理清一下使用需要做的步骤 建项目,导入mybatis(3.5.2)和mysql(5.1.47)进pom.xml pom.xml需配置build时过滤器,否则会出现xml文件导出不了的问题 resour ...
 - 【python实现卷积神经网络】上采样层upSampling2D实现
			
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
 - AJ学IOS(16)UI之XIB自定义Cell实现团购UI
			
AJ分享,必须精品 先看效果图 自定义Cell 本次主要是自定义Cell的学习 实现自定义Cell主要有三种方法:按照使用的频繁度排序: XIB > 纯代码 > StoryBoard XI ...