功能点:如何爬取列表页,并根据列表页获取详情页信息?

爬取网站:东莞阳光政务网

完整代码: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爬虫系列之四--爬取列表和详情的更多相关文章

  1. Scrapy爬虫框架之爬取校花网图片

    Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...

  2. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  3. windows下使用python的scrapy爬虫框架,爬取个人博客文章内容信息

    scrapy作为流行的python爬虫框架,简单易用,这里简单介绍如何使用该爬虫框架爬取个人博客信息.关于python的安装和scrapy的安装配置请读者自行查阅相关资料,或者也可以关注我后续的内容. ...

  4. Python爬虫系列之爬取美团美食板块商家数据(二)

    今天为大家重写一个美团美食板块小爬虫,说不定哪天做旅游攻略的时候也可以用下呢.废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: requests模块: argpar ...

  5. Python爬虫系列之爬取美团美食板块商家数据(一)

    主要思路 目的: 根据输入的城市名,爬取该城市美团美食板块所有商家的数据.数据包括: 店名.评分.评论数量.均价.地址, 并将这些数据存入Excel中. 最后尝试对爬取到的数据做一个简单的分析. 克服 ...

  6. python爬虫系列之爬取多页gif图像

                   python爬取多页gif图像 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  7. 2019基于python的网络爬虫系列,爬取糗事百科

    **因为糗事百科的URL改变,正则表达式也发生了改变,导致了网上许多的代码不能使用,所以写下了这一篇博客,希望对大家有所帮助,谢谢!** 废话不多说,直接上代码. 为了方便提取数据,我用的是beaut ...

  8. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  9. scrapy爬虫系列之开头--scrapy知识点

    介绍:Scrapy是一个为了爬取网站数据.提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取.Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度. 0.说明: ...

随机推荐

  1. linux -- 常用的20个命令

    1. ls命令 ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. root@tecmint:~# ls Andr ...

  2. R语言绘图边框

    在R语言中, 绘图边框一共有3个区域: device region : figure region : plot region   : 在描述不同区域大小的时候,有对应的不同参数: din : 返回d ...

  3. 【Deep learning】NLP

    http://www.tuicool.com/articles/EvaQJnJ http://cs224d.stanford.edu/syllabus.html

  4. ASP.NET的用户控件

    本文介绍如何在ASP.NET中创建用户控件,控件属性的动态修改以及控件的事件出发机制. 简介ASP.NET的服务端控件使得Web开发工作变得更为简单,功能更为强大.我们介绍过如何在ASP.NET页面中 ...

  5. mysql数据库中,通过mysqladmin工具,创建数据库

    需求描述: 今天接触到了mysqladmin工具,主要是一个客户端工具,用来管理mysql server的 可以通过mysqladmin直接创建数据库,而不需要登录到mysql控制台中,在此记录下. ...

  6. CSS3给页面打标签

    我们经常会在页面的左上角或者右上角看到类似如图所示的标签,比如页面的链接(最常使用)等,下面我们就实现一个简单的标签 实现步骤是先做一个水平长条,使用CSS3的transform来实现旋转,如果是在左 ...

  7. swift - 将表格滚动条移动到底部

    类似聊天那种效果,最新出现消息后,会自动滚动到表的底部,具体代码实现如下: 1,使用scrollToRow方法: let mySec = 1//最后一个分组的索引(0开始,如果没有分组则为0 let ...

  8. laravel安装 redis 并驱动 session

    1)composer 安装 redis composer require predis/predis 如果感兴趣,可以看一下这里 2)配置 redis 连接(config/database.php 配 ...

  9. 微信移动端(wap)开发调试工具

    为帮助开发者更方便.更安全地开发和调试基于微信的网页,微信官方推出了 web 开发者工具.它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发 ...

  10. 事件和winform的学习

             记得现在已经不在学习winform啦,可是我们为什么还是学习啦,我感觉就是帮助我们往下一个层次进发啦,因为从控制台直接开始进入webform的学习,我们很难接受啦,估计效率也不高啦, ...