python-scrapy如何循环抓取所有类似的页面

问题描述

scrapy如何循环抓取所有类似的页面

我是刚刚开始学习爬虫,模仿网上一个例子自己写了一个,想循环抓取所有页面新闻标题和链接,但是只能抓取到起始页面的。

这是抓取的起始页面

从下面可以看到列表有很多,我想抓取所有的新闻条目,每一页的地址仅一个数字不同

spider文件夹下的关键代码如下所示

 # -*- coding:utf-8 -*-

from scrapy.spiders import Spider
from scrapy.selector import Selector
from ahutNews.items import AhutnewsItem
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

class AhutNewsSpider(Spider):
    name = 'ahutnews'
    allowed_domains="ahut.edu.cn"
    start_urls=['http://news.ahut.edu.cn/list.jsp?a7t=314&a7p=2&a7c=20&urltype=tree.TreeTempUrl&wbtreeid=1002']
    rules=(
            Rule(LinkExtractor(allow=r"/list.jsp?a7t=314&a7p=*"),
            callback="parse",follow=True),
        )

    def parse(self, response):

        hxs = Selector(response)
        titles = hxs.xpath('//tr[@height="26"]')
        items = []
        for data in titles:
            item = AhutnewsItem()

            title=data.xpath('td[1]/a/@title').extract()
            link=data.xpath('td[1]/a/@href').extract()

            item['title'] = [t.encode('utf-8') for t in title]
            item['link'] = "news.ahut.edu.cn" + [l.encode('utf-8') for l in link][0]
            items.append(item)
        return items

解决方案

http://www.tuicool.com/articles/jyQF32V

解决方案二:

这个例子不错,代码没有注释,最后有一句if link[-1] == '4'这个等于4啥意思啊,返回条件吗?

解决方案三:

这是我自己该写的,参考的是另外一个例子

```# -*- coding:utf-8 -*-

from scrapy.spiders import Spider
from scrapy.selector import Selector
from ahutNews.items import AhutnewsItem
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request

class AhutNewsSpider(Spider):
name = 'ahutnews'
allowed_domains="news.ahut.edu.cn"
start_urls=['http://news.ahut.edu.cn/list.jsp?a7t=314&a7p=1&a7c=20&urltype=tree.TreeTempUrl&wbtreeid=1002']
# rules=(
# Rule(LinkExtractor(allow=r"/list.jsp?a7t=314&a7p=*"),
# callback="parse",follow=True),
# )

def parse(self, response):

    hxs = Selector(response)
    titles = hxs.xpath('//tr[@height="26"]')
    # items = []
    for data in titles:
        item = AhutnewsItem()

        title=data.xpath('td[1]/a/@title').extract()
        link=data.xpath('td[1]/a/@href').extract()

        item['title'] = [t.encode('utf-8') for t in title]
        item['link'] = "news.ahut.edu.cn" + [l.encode('utf-8') for l in link][0]
        yield item
        # items.append(item)
    # return items

    urls = hxs.xpath('//tr[@valign="middle"]/td[2]/div/a[last()]/@href').extract()
    for url in urls:
        print url
        url = "http://news.ahut.edu.cn/list.jsp"+url
        print url
        yield Request(url, callback=self.parse)

**这是参考的例子**

#!/usr/bin/python

-*- coding:utf-8 -*-

from scrapy.contrib.spiders import CrawlSpider,Rule

from scrapy.spider import Spider
from scrapy.http import Request
from scrapy.selector import Selector
from csdnblog.items import CsdnblogItem

class CSDNBlogSpider(Spider):
"""爬虫CSDNBlogSpider"""

name = "csdnblog"

#减慢爬取速度 为1s
download_delay = 1
allowed_domains = ["blog.csdn.net"]
start_urls = [

    #第一篇文章地址
    "http://blog.csdn.net/u012150179/article/details/11749017"
]

def parse(self, response):
    sel = Selector(response)

    #items = []
    #获得文章url和标题
    item = CsdnblogItem()

    article_url = str(response.url)
    article_name = sel.xpath('//div[@id="article_details"]/div/h1/span/a/text()').extract()

    item['article_name'] = [n.encode('utf-8') for n in article_name]
    item['article_link'] = article_url.encode('utf-8')

    yield item

    #获得下一篇文章的url
    urls = sel.xpath('//li[@class="next_article"]/a/@href').extract()
    for url in urls:
        print url
        url = "http://blog.csdn.net" + url
        print url
        yield Request(url, callback=self.parse)

应该是一样的,但是我写的报错了,错误是
![图片说明](http://img.ask.csdn.net/upload/201602/29/1456746876_438093.png)
## 我查了一下,官方文档解释说是所该链接不符合当前的站点请求,可是该页面跟第一个是一样的,包含类似的结构,为什么就无法进行下去了呢,麻烦帮忙看一下
时间: 2025-01-03 16:00:03

python-scrapy如何循环抓取所有类似的页面的相关文章

python-为何用Python做爬虫时抓取下来的页面跟源代码不一样?

问题描述 为何用Python做爬虫时抓取下来的页面跟源代码不一样? 代码如下: -*- coding:utf-8 -*- import urllib import urllib2 import re baseURL = 'http://zhidao.baidu.com/question/491268910.html' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, li

python使用自定义user-agent抓取网页的方法_python

本文实例讲述了python使用自定义user-agent抓取网页的方法.分享给大家供大家参考.具体如下: 下面python代码通过urllib2抓取指定的url的内容,并且使用自定义的user-agent,可防止网站屏蔽采集器 import urllib2 req = urllib2.Request('http://192.168.1.2/') req.add_header('User-agent', 'Mozilla 5.10') res = urllib2.urlopen(req) html

在Asp中不借助第三方组件抓取别的站点的页面

微软在Asp中给我们提供了一种使用ActiveX的来做页面的方法,我们就用一个简单的抓取页面的例子来实际讲解一下这种方法,在本站的专栏的php版面中,我曾经讲过如何使用php来抓取别的站点的页面.<%url = "http://www.asp888.net/study/testSSi.txt"set inet = createobject("InetCtls.Inet")inet.RequestTimeOut = 20inet.Url = urlstrRet

http访问-人为编码实现网页页面内容的抓取与浏览器访问页面的区分点有哪些?

问题描述 人为编码实现网页页面内容的抓取与浏览器访问页面的区分点有哪些? 请问大神们用浏览器访问页面与编码实现请求访问来获取内容有什么区分点吗?都是HTTP协议的情况下,希望大家能给分享下经验,谢谢! 解决方案 是说爬虫吗?开发爬虫可以去神箭手云爬虫看看.很不错的爬虫云开发平台

Python如何实现并行抓取整站40万条房价数据的教程(可更换抓取城市)

写在前面 这次的爬虫是关于房价信息的抓取,目的在于练习10万以上的数据处理及整站式抓取. 数据量的提升最直观的感觉便是对函数逻辑要求的提高,针对Python的特性,谨慎的选择数据结构.以往小数据量的抓取,即使函数逻辑部分重复,I/O请求频率密集,循环套嵌过深,也不过是1~2s的差别,而随着数据规模的提高,这1~2s的差别就有可能扩展成为1~2h. 因此对于要抓取数据量较多的网站,可以从两方面着手降低抓取信息的时间成本. 1)优化函数逻辑,选择适当的数据结构,符合Pythonic的编程习惯.例如,

python实现从web抓取文档的方法_python

本文实例讲述了Python实现从Web的一个URL中抓取文档的方法,分享给大家供大家参考.具体方法分析如下: 实例代码如下: import urllib doc = urllib.urlopen("http://www.python.org").read() print doc#直接打印出网页 def reporthook(*a): print a #将http://www.renren.com网页保存到renre.html中, #每读取一个块调用一字reporthook函数 urll

python 自动提交和抓取网页_python

下面是用python写的,使用lxml来做html分析,从网上看到的,说是分析速度最快的哦,不过没有验证过.好了,上代码. 复制代码 代码如下: import urllib import urllib2 import urlparse import lxml.html def url_with_query(url, values): parts = urlparse.urlparse(url) rest, (query, frag) = parts[:-2], parts[-2:] return

如何跨站抓取别的站点的页面的补充

在实际的应用中,经常会遇到一些特殊的情况,比如需要新闻,天气预报,等等,但是作为个人站点或者实力小的站点 我们不可能有那么多的人力 物力 财力去做这些事情,怎么办呢?  好在互联网是 资源共享的,我们可以利用程序 自动的把别的站点的页面抓取回来经过处理后被我们所利用.   用什么呢,那个战友给的是不行的,其实在Php有这个功能,那就是用curl库.请看下面的代码!  <?php $ch = curl_init ("http://dailynews.sina.com.cn"); $

网页抓取-phantomjs访问html页面

问题描述 phantomjs访问html页面 在firebug控制台上运行抓取标签内容的代码的结果和用phantomjs运行相同操作的js代码的结果有时会不一样,尤其是多次执行后 document.getElementsByTagName('h3')[0].innerHTML; 解决方案 看是不是因为ajax异步导致页面内容是动态的