gpt4 book ai didi

python - Scrapy 不会抓取所有页面

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:52 25 4
gpt4 key购买 nike

这是我的工作代码:

from scrapy.item import Item, Field

class Test2Item(Item):
title = Field()

from scrapy.http import Request
from scrapy.conf import settings
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule

class Khmer24Spider(CrawlSpider):
name = 'khmer24'
allowed_domains = ['www.khmer24.com']
start_urls = ['http://www.khmer24.com/']
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22 AlexaToolbar/alxg-3.1"
DOWNLOAD_DELAY = 2

rules = (
Rule(SgmlLinkExtractor(allow=r'ad/.+/67-\d+\.html'), callback='parse_item', follow=True),
)

def parse_item(self, response):
hxs = HtmlXPathSelector(response)
i = Test2Item()
i['title'] = (hxs.select(('//div[@class="innerbox"]/h1/text()')).extract()[0]).strip(' \t\n\r')
return i

它只能废弃 10 或 15 条记录。总是随机数!我无法获取所有具有类似 http://www.khmer24.com/ad/any-words/67-anynumber.html 模式的页面

我真的怀疑Scrapy是因为重复请求才爬完的。他们建议使用 dont_filter = True 但是,我不知道将它放在我的代码中的什么位置。

我是 Scrapy 的新手,非常需要帮助。

最佳答案

1.“他们建议使用 dont_filter = True 但是,我不知道将它放在我的代码中的什么位置。”

该参数在CrawlSpider继承的BaseSpider中。 ( scrapy/spider.py ) 默认设置为 True。

2."它只能抓取 10 或 15 条记录。"

原因:这是因为 start_urls 不是很好。在这个问题中,蜘蛛开始爬行 http://www.khmer24.com/ ,让我们假设它得到 10 个要遵循的 url(满足模式)。然后,蜘蛛继续爬取这 10 个 url。但是由于这些页面包含的满足模式太少,蜘蛛会跟踪一些 url(甚至没有 url),从而导致停止爬行。

可能的解决方案:我上面所说的原因只是重申了 icecrime 的观点。解决方案也是如此。

  • 建议使用“所有广告”页面作为start_urls。 (您也可以将主页用作 start_urls 并使用新的规则。)

  • 规则:

    rules = (
    # Extract all links and follow links from them
    # (since no callback means follow=True by default)
    # (If "allow" is not given, it will match all links.)
    Rule(SgmlLinkExtractor()),

    # Extract links matching the "ad/any-words/67-anynumber.html" pattern
    # and parse them with the spider's method parse_item (NOT FOLLOW THEM)
    Rule(SgmlLinkExtractor(allow=r'ad/.+/67-\d+\.html'), callback='parse_item'),
    )

引用: SgmlLinkExtractor , CrawlSpider example

关于python - Scrapy 不会抓取所有页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com