python网络爬虫之scrapy 调试以及爬取网页

时间:2022-01-22 23:05:15

Shell调试:

进入项目所在目录,scrapy shell “网址”

如下例中的:

scrapy shell http://www.w3school.com.cn/xml/xml_syntax.asp

python网络爬虫之scrapy 调试以及爬取网页

python网络爬虫之scrapy 调试以及爬取网页

可以在如下终端界面调用过程代码如下所示:

python网络爬虫之scrapy 调试以及爬取网页

相关的网页代码:

python网络爬虫之scrapy 调试以及爬取网页

我们用scrapy来爬取一个具体的网站。以迅读网站为例。

如下是首页的内容,我想要得到文章列表以及对应的作者名称。
python网络爬虫之scrapy 调试以及爬取网页

首先在items.py中定义title, author. 这里的Test1Item和Django中的modul作用类似。这里可以将Test1Item看做是一个容器。这个容器继承自scrapy.Item.

而Item又继承自DictItem。因此可以认为Test1Item就是一个字典的功能。其中title和author可以认为是item中的2个关键字。也就是字典中的key

class Item(DictItem):
class Test1Item(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
   
title=Field()
    author=Field()
下面就在test_spider.py中开始写网页解析代码
from scrapy.spiders import Spider
from scrapy.selector import Selector
from test1.items import Test1Item
 
class testSpider(Spider):
    name="test1"    #这里的name必须和创建工程的名字一致,否则会提示找不到爬虫项目
   
allowd_domains=['http://www.xunsee.com']
    start_urls=["http://www.xunsee.com/"]
    def parse(self, response):
        items=[]
        sel=Selector(response)
        sites = sel.xpath('//*[@id="content_1"]/div')  #这里是所有数据的入口。下面所有的div都是存储的文章列表和作者
        for site in sites:
          item=Test1Item()
          title=site.xpath('span[@class="title"]/a/text()').extract()
          h=site.xpath('span[@class="title"]/a/@href').extract()
          item['title']=[t.encode('utf-8') for t in title]
        author=site.xpath('span[@class="author"]/a/text()').extract()
          item['author']=[a.encode('utf-8') for a in author]
          items.append(item)
         return items
获取到title以及author的内容后,存储到item中。再将所有的item存储在items的列表中

在pipelines.py中修改Test1Pipeline如下。这个类中实现的是处理在testSpider中返回的items数据。也就是存储数据的地方。我们将items数据存储到json文件中去

class Test1Pipeline(object):
    def __init__(self):
        self.file=codecs.open('xundu.json','wb',encoding='utf-8')
    def process_item(self, item, spider):
        line=json.dumps(dict(item)) + '\n'
       
self.file.write(line.decode("unicode_escape"))
        return item

工程运行后,可以看到在目录下生成了一个xundu.json文件。其中运行日志可以在log文件中查看

python网络爬虫之scrapy 调试以及爬取网页

从这个爬虫可以看到,scrapy的结构还是比较简单。主要是三步:

1 items.py定义内容存储的关键字

2 自定义的test_spider.py中进行网页数据的爬取并返回数据

3 pipelines.py中对tes_spider.py中返回的内容进行存储

python网络爬虫之scrapy 调试以及爬取网页的更多相关文章

  1. 爬虫(二)Python网络爬虫相关基础概念、爬取get请求的页面数据

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫    1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...

  2. 【Python网络爬虫四】通过关键字爬取多张百度图片的图片

    最近看了女神的新剧<逃避虽然可耻但有用>,同样男主也是一名程序员,所以很有共鸣 被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片. 百度搜索结果:新恒结衣 本文主要分为4个部分: 1.下载 ...

  3. Python网络爬虫第三弹《爬取get请求的页面数据》

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  4. Python网络爬虫案例(二)——爬取招聘信息网站

    利用Python,爬取 51job 上面有关于 IT行业 的招聘信息 版权声明:未经博主授权,内容严禁分享转载 案例代码: # __author : "J" # date : 20 ...

  5. &lbrack;Python&rsqb;网络爬虫(一):抓取网页的含义和URL基本构成

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛.网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个 ...

  6. Python网络爬虫之Scrapy框架(CrawlSpider)

    目录 Python网络爬虫之Scrapy框架(CrawlSpider) CrawlSpider使用 爬取糗事百科糗图板块的所有页码数据 Python网络爬虫之Scrapy框架(CrawlSpider) ...

  7. Python使用urllib&comma;urllib3&comma;requests库&plus;beautifulsoup爬取网页

    Python使用urllib/urllib3/requests库+beautifulsoup爬取网页 urllib urllib3 requests 笔者在爬取时遇到的问题 1.结果不全 2.'抓取失 ...

  8. python网络爬虫之scrapy 工程创建以及原理介绍

    执行scrapy startproject XXXX的命令,就会在对应的目录下生成工程 在pycharm中打开此工程目录:并在Run中选择Edit Configuration 点击+创建一个Pytho ...

  9. 16&period;Python网络爬虫之Scrapy框架(CrawlSpider)

    引入 提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法 ...

随机推荐

  1. mysql 字符串 日期互转

    一.字符串转日期 下面将讲述如何在MySQL中把一个字符串转换成日期: 背景:rq字段信息为:20100901 1.无需转换的: SELECT * FROM tairlist_day WHERE rq ...

  2. 不需要了解任何底层知识,就可以汉化!Let&grave;s go&excl;&excl;&excl;

    汉化?莫要被这两个字吓到. 其实你也可以汉化,跟着我的步骤来,你也可以进行汉化,Let`s go!!!(大鸟飘过) 这里汉化的是微软企业类库的配置管理工具EntLibConfig.exe.当然,这里的 ...

  3. 使用Gradle运行集成测试

    如果Gradle构建的项目是一个web项目的话,里面可能包含一些集成测试和功能性测试.这些测试和单元测试不同之处是在运行之前要先在本地将web服务启动起来,并且跑完测试后能够自动的关闭web服务. 在 ...

  4. sizeof &lowbar;countof &lowbar;tcslen的比较

    sizeof ----用于计算数组或其他对象的大小,以字节为单位,含\0结束符. _countof----一个宏,用于计算数组的实际元素个数 ,含\0结束符: _tcslen----c++求数组长度的 ...

  5. 对端口Com1的访问被拒绝

    某项目中,需通过com口的方式读取CF卡的rfid,. 问题:当我关闭模块,然后第二次打该模块时,弹出如下错误”对端口Com1的访问被拒绝”(编程这一行业,不是找不到对象,就是被xxx拒绝!): 断点 ...

  6. jsoncpp动态解析节点类型

    在互联网无处不在的今天,JSON作为轻量级数据存储格式,被广泛应用到互联网数据传输中.众所周知,JSON由键/值对.对象.数组组成,其中键/值对的值包括以下几种类型: enum ValueType { ...

  7. 演进之美,越来越美:三分钟看尽 iOS 1 ~ iOS 8 的进化史

    演进之美,越来越美:三分钟看尽 iOS 1 ~ iOS 8 的进化史 原文出处: 少数派 9 月 18 日苹果就将推出 iOS 8 正式版了,从 2007 年发布第一代 iPhone 时搭载在 iPh ...

  8. Elasticsearch 编程API入门系列---说在前面的话

    前提,是 Eclipse下Maven新建项目.自动打依赖jar包(包含普通项目和Web项目) setting.xml配置文件 如何在Maven官网下载历史版本 HBase 开发环境搭建(Eclipse ...

  9. oracle中查找和删除重复记录的几种方法总结

    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...

  10. thymeleaf传值onclick到js

    带有单引号 targetUrl('val') <a th:onclick="'javascript:targetUrl(\''+${indexURL.value}+'\');'&quo ...