scrapy爬虫系列之四--爬取列表和详情
功能点:如何爬取列表页,并根据列表页获取详情页信息?
爬取网站:东莞阳光政务网
完整代码:https://files.cnblogs.com/files/bookwed/yangguang.zip
主要代码:
yg.py
import scrapy
from yangguang.items import YangguangItem class YgSpider(scrapy.Spider):
name = 'yg'
allowed_domains = ['sun0769.com']
start_urls = ['http://wz.sun0769.com/index.php/question/report'] def parse(self, response):
tr_list = response.xpath("//div[@class='greyframe']/table[2]//tr")
for tr in tr_list:
item = YangguangItem()
item["title"] = tr.xpath("./td[2]/a[2]/text()").extract_first()
item["href"] = tr.xpath("./td[2]/a[2]/@href").extract_first()
item["status"] = tr.xpath("./td[3]/span/text()").extract_first()
item["publish_time"] = tr.xpath("./td[last()]/text()").extract_first()
if type(item["href"]) == str:
# 请求详情页
yield scrapy.Request(
item["href"],
callback=self.parse_detail,
meta={"item": item}
) # 翻页
next_url = response.xpath("//a[text()='>']/@href").extract_first()
if next_url is not None:
yield scrapy.Request(next_url, callback=self.parse) # 解析详情页
def parse_detail(self, response):
item = response.meta["item"]
# 获取详情页的内容、图片
item["content"] = response.xpath("//div[@class='wzy1']/table[2]//tr[1]/td[@class='txt16_3']/text()").extract()
item["content_image"] = response.xpath("//div[@class='wzy1']/table[2]//tr[1]/td[@class='txt16_3']//img/@src").extract()
item["content_image"] = ["http://wz.sun0769.com"+i for i in item["content_image"]]
yield item # 对返回的数据进行处理
pipelines.py
class YangguangPipeline(object):
def __init__(self):
self.f = open('yangguang.json', 'w', encoding='utf-8') def process_item(self, item, spider):
item["content"] = self.process_content(item["content"])
self.f.write(json.dumps(dict(item), ensure_ascii=False) + ',\n')
return item def process_content(self, content):
# 对内容项里的\xa0 和 空白字符替换为空
content = [re.sub(r"\xa0|\s", "", i) for i in content]
# 对替换过的空字符串去除
content = [i for i in content if len(i) > 0]
return content
scrapy爬虫系列之四--爬取列表和详情的更多相关文章
- Scrapy爬虫框架之爬取校花网图片
		
Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...
 - scrapy爬虫系列之三--爬取图片保存到本地
		
功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...
 - windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息
		
scrapy作为流行的python爬虫框架,简单易用,这里简单介绍如何使用该爬虫框架爬取个人博客信息.关于python的安装和scrapy的安装配置请读者自行查阅相关资料,或者也可以关注我后续的内容. ...
 - Python爬虫系列之爬取美团美食板块商家数据(二)
		
今天为大家重写一个美团美食板块小爬虫,说不定哪天做旅游攻略的时候也可以用下呢.废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: argpar ...
 - Python爬虫系列之爬取美团美食板块商家数据(一)
		
主要思路 目的: 根据输入的城市名,爬取该城市美团美食板块所有商家的数据.数据包括: 店名.评分.评论数量.均价.地址, 并将这些数据存入Excel中. 最后尝试对爬取到的数据做一个简单的分析. 克服 ...
 - python爬虫系列之爬取多页gif图像
		
python爬取多页gif图像 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...
 - 2019基于python的网络爬虫系列,爬取糗事百科
		
**因为糗事百科的URL改变,正则表达式也发生了改变,导致了网上许多的代码不能使用,所以写下了这一篇博客,希望对大家有所帮助,谢谢!** 废话不多说,直接上代码. 为了方便提取数据,我用的是beaut ...
 - [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍
		
前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...
 - scrapy爬虫系列之开头--scrapy知识点
		
介绍:Scrapy是一个为了爬取网站数据.提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取.Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度. 0.说明: ...
 
随机推荐
- html -- 实体
 - Android多线程任务的优化1:AsyncTask的缺陷 (转至 http://www.linuxidc.com/Linux/2011-09/43150.htm)
			
导语:在开发Android应用的过程中,我们需要时刻注意保障应用的稳定性和界面响应性,因为不稳定或者响应速度慢的应用将会给用户带来非常差的交互体验.在越来越讲究用户体验的大环境下,用户也许会因为应用的 ...
 - HDU 1556 Color the ball 树状数组 题解
			
Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动 ...
 - asp.net mvc清空指定cookies
			
HttpCookie hc = Request.Cookies["user"]; hc.Expires = DateTime.Now.AddDays( ...
 - Discuz论坛post登录C#源码
			
总结: loginhash formhash 表单参数 seccode 参数最重要 全局 的 获取验证码 判断验证码 到最后提交登录 它都有存在 ,seccode==idhash COOKIE自动维 ...
 - php 错误和异常处理
			
一.错误和异常处理 1.1 错误类型和基本的调试方法 PHP程序的错误发生一般归属于下列三个领域: 语法错误: 语法错误最常见,并且也容易修复.如:代码中遗漏一个分号.这类错误会阻止脚本的执行. 运行 ...
 - 数据结构 http://www.cnblogs.com/sun-haiyu/p/7704654.html
			
数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树.算法的性能取决于树的形状,而树的形状取决于插入键的顺序.在最好的情况下,n个结点的树是完全平衡的,如下图“最好情况”所示,此时树 ...
 - NHibernate初学二之简单执行SQL及HQL、Linq
			
上篇文章简单介绍NHibernate之简单增删改查,本文将会简单介绍有关执行NHibernate的SQL.HQL及存储过程: 一:执行SQL语句实例,运用CreateSQLQuery方法 public ...
 - findmaven的英文版本号上线了
			
http://www.findmaven.net是一个查找Jar和查找Maven的Maven仓库搜索引擎.它能够依据Java开发人员提供的Class名或者Jar名找到包括它的Jar,同一时候提供Jar ...
 - python 2.0 s12 day5 常用模块介绍
			
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...