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 磁盘空间太少了,还没扩展磁盘空间,所 ...
随机推荐
- Spring Boot 中自定义 SpringMVC 配置,到底继承谁哪一个类或则接口?
看了这篇文章,写的非常的言简意赅,特此记录下: 1.Spring Boot 1.x 中,自定义 SpringMVC 配置可以通过继承 WebMvcConfigurerAdapter 来实现. 2.Sp ...
- html中的字幕滚动marquee属性
该标签不是HTML3.2的一部分,并且只支持MSIE3以后内核,所以如果你使用非IE内核浏览器(如:Netscape)可能无法看到下面一些很有意思的效果,该标签是个容器标签. 语法: <marq ...
- centos替换源
!/bin/sh 本文原内容来自:https://github.com/judasn/Linux-Tutorial/blob/master/CentOS-Extra-Packages.md 可能额外需 ...
- 基于Websocket开发的仿微信聊天室
一.运行环境及涉及技术:----------------------------------* Visual Studio 2019* SQL SERVER 2008 R2* .Net FrameWo ...
- 1020 Tree Traversals (25 分)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...
- 用人话告诉小白:什么是项目管理(例如Maven),什么是调试工具(即debugger),什么是编译(即compile)
项目管理 以java程序的项目管理软件Maven为例,java程序根据代码的不同需要不同的jar文件才能编译运行. 人物:两个程序员A和B 物品:一个java程序G,许多jar文件 场景:当A在自己电 ...
- ubuntu上安装lamp环境命令清单
#install configuration manager sudo apt-get install tasksel #install basic lamp stack sudo tasksel i ...
- 关于机械硬盘的 CMR 和 SMR 技术
文章更新于:2020-02-21 部分内容是非原创的截图 一.机械硬盘价格区间 这些都是在天猫上面找的一些普遍价格,型号不完全对应,只是简单做个比较. 其中西数天猫旗舰店2TB硬盘64MB硬盘已经下架 ...
- MTK Android修改System分区
Z:\rk3326_p_hq_rf8637sa\device\rockchip\common\BoardConfig.mk #Calculate partition size from paramet ...
- Python 类属性和方法
import types class Dog(object): __slots__ = ("name", "color", "info") ...