Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 胶状链接抽取器复制(?)_Python_Algorithm_Python 2.7_Web Crawler_Scrapy - Fatal编程技术网

Python 胶状链接抽取器复制(?)

Python 胶状链接抽取器复制(?),python,algorithm,python-2.7,web-crawler,scrapy,Python,Algorithm,Python 2.7,Web Crawler,Scrapy,我已经实现了如下的爬虫程序 它正在工作,它将通过链接提取器管理的站点 基本上,我尝试从页面的不同位置提取信息: -类“news”(如果存在)下的href和text() -类“think block”下的图像url(如果存在) 我的刮痧有三个问题: 1)复制linkextractor 似乎它将复制已处理的页面。(我对照导出文件检查,发现相同的~.img出现了很多次,但几乎不可能) 事实上,对于网站中的每个页面,底部都有超链接,方便用户指向他们感兴趣的主题,而我的目标是从主题页面(这里列出了同一主题

我已经实现了如下的爬虫程序

它正在工作,它将通过
链接提取器
管理的站点

基本上,我尝试从页面的不同位置提取信息:

-类“news”(如果存在)下的href和text()

-类“think block”下的图像url(如果存在)

我的刮痧有三个问题:

1)复制linkextractor

似乎它将复制已处理的页面。(我对照导出文件检查,发现相同的~.img出现了很多次,但几乎不可能)

事实上,对于网站中的每个页面,底部都有超链接,方便用户指向他们感兴趣的主题,而我的目标是从主题页面(这里列出了同一主题下的几个段落标题)和一个段落页面中找到的图像中提取信息(你可以点击主题页面上的文章标题进入文章页面)

我怀疑链接提取器会在这种情况下再次循环相同的页面

(可能用深度限制解决?)

2)改进分析项目

我认为它对于
解析\u item
来说效率很低。我怎样才能改进它?我需要从web中的不同位置提取信息(确保它仅在存在时提取)。此外,似乎parse_项只能处理HkejImage而不能处理HKEJIMET(我再次检查了输出文件)。我应该如何处理这个问题

3)我需要蜘蛛能够读中文。

我正在香港的一个网站上爬行,能够阅读中文是非常必要的

网站:

只要它属于“dailynews”,那就是我想要的

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.http import Request, FormRequest
from scrapy.contrib.linkextractors import LinkExtractor
import items


class EconjournalSpider(CrawlSpider):
    name = "econJournal"
    allowed_domains = ["hkej.com"]
    login_page = 'http://www.hkej.com/template/registration/jsp/login.jsp'
    start_urls =  'http://www.hkej.com/dailynews'

    rules=(Rule(LinkExtractor(allow=('dailynews', ),unique=True), callback='parse_item', follow =True),
           )


    def start_requests(self):
         yield Request(
         url=self.login_page,
         callback=self.login,
         dont_filter=True
         )
# name column
    def login(self, response):
        return FormRequest.from_response(response,
                    formdata={'name': 'users', 'password': 'my password'},
                    callback=self.check_login_response)

    def check_login_response(self, response):
        """Check the response returned by a login request to see if we are
        successfully logged in.
        """
        if "username" in response.body:       
            self.log("\n\n\nSuccessfully logged in. Let's start crawling!\n\n\n")
            return Request(url=self.start_urls)
        else:
            self.log("\n\n\nYou are not logged in.\n\n\n")
            # Something went wrong, we couldn't log in, so nothing happens

    def parse_item(self, response):
        hxs = Selector(response)
        news=hxs.xpath("//div[@class='news']")
        images=hxs.xpath('//p')

        for image in images:
            allimages=items.HKejImage()
            allimages['image'] = image.xpath('a/img[not(@data-original)]/@src').extract()
            yield allimages

        for new in news:
            allnews = items.HKejItem()
            allnews['news_title']=new.xpath('h2/@text()').extract()
            allnews['news_url'] = new.xpath('h2/@href').extract()
            yield allnews

非常感谢您,我将非常感谢您的帮助

首先,要设置设置,请在
settings.py
文件中设置,或者您可以在spider上指定
custom\u settings
参数,如:

custom_settings = {
    'DEPTH_LIMIT': 3,
}
然后,您必须确保爬行器正在到达
parse_item
方法(我认为它没有,还没有测试)。此外,您不能在规则上指定
回调
遵循
参数,因为它们不能一起工作

首先删除规则上的
follow
,或添加另一个规则,以检查要遵循的链接以及要作为项目返回的链接

其次,在您的
parse_item
方法中,您得到了不正确的xpath,要获得所有图像,可能您可以使用以下方法:

images=hxs.xpath('//img')
然后获取图像url:

allimages['image'] = image.xpath('./@src').extract()
就新闻而言,这似乎是可行的:

allnews['news_title']=new.xpath('.//a/text()').extract()
allnews['news_url'] = new.xpath('.//a/@href').extract()

现在,为了理解您的问题,这不是一个
LinkedExtractor复制
错误,而是一个糟糕的规则规范,还要确保您有有效的xpath,因为您的问题没有表明您需要xpath更正。

您的代码中有很多错误,它是否不能正常工作?或者根本不运行?至少它能浏览页面。此外,它没有按我所希望的那样运行,因为它遇到了无限循环/无法提取hkejItem类的数据。这个问题太广泛了。试着把这个问题分成三个独立的小问题。当然!我是否应该将此帖子编辑成一个较小的问题,并为剩余的问题创建新帖子?您的意思是“follow”和“callback”不能在规则中一起使用,还是不应与规则一起使用?我读了一些教程,大多数爬行器都有这两个教程。
follow
callback
在同一个规则中协同工作。如果仔细阅读文档,您会发现如果指定
callback
,它只会将
follow
的默认值修改为
False
。不过,您可以像@yukclam9那样覆盖它。感谢@Ghajba的解释。但是,我仍然有一些大问题,比如重复链接和糟糕的结构解析项目。您是否测试了您的代码是否达到了
parse\u item
?您是否可以通过测试登录凭据?