Scrapy Start_URL不正确

时间:2016-04-12 20:49:02

标签: python url scrapy scrapy-spider

所以我是scrapy的新手,我遇到了一个问题,我相信起始网址不正确。

然后点击链接加载到阵营描述

但是,当我使用该起始网址时,它不会加载。含义scrapy打开并加载telnet但永远不会连接。当我使用http://www.w3.org/1999/xhtml时(我从inspect(chrome)的顶线获取它抓取但似乎是完全错误的网站。(我从检查页面的顶部获得此链接)

应该从哪里开始,网址为:http://www.kidscamps.com/camps/california-overnight-camps-page0.html

有什么想法吗?并提前致谢! 对于所有注释掉的内容感到抱歉

所以我想我最大的问题是如何找到CORRECT url,因为我的所有其他脚本都能正常工作。

如果没有指定规则,它也不起作用。

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from kidscamp_com.items import KidscampComItem
import html2text


class MySpider(CrawlSpider):
    name = "kids"
    #allowed_domains = "http://www.bayareaparent.com/Camp-Guide/index.php/cp/1/si/0/"
    start_urls = ['http://www.kidscamps.com/residential/overnight_camp.html'
    ]

    rules = (
    Rule(LinkExtractor(allow=(), restrict_xpaths=('//*[@id="results-wrapper"]/div[1]/p[1]/a',)), callback="parse1", follow=True),
     )


    def parse1(self, response):
        hxs = Selector(response)
        body = hxs.xpath('//*[@id="body-wrapper"]')
        items = []
        for body in body:
            item = KidscampComItem()
         #   item["camp_name"] = body.xpath('').extract()
          #  item["location"] = body.xpath('').extract()
            item["phone"] = body.xpath('//a[@class="phone"]//text()').extract()
            item["website"] = body.xpath('//*[@id="results-wrapper"]/div[1]/div/div[2]/ul[2]/li[2]/a').extract()
           # item["email"] = body.xpath('').extract()
            item["description"] = body.xpath('//*[@id="info-page"]/div[2]/div//text()').extract()
            item["camp_size"] = body.xpath('//*[@id="info-page"]/div[2]/div/ul[1]/li[1]/dd').extract()
            item["founded"] = body.xpath('//*[@id="info-page"]/div[2]/div/ul[1]/li[2]/dd').extract()
            item["gender"] = body.xpath('//*[@id="info-page"]/div[2]/div/ul[1]/li[3]/dd').extract()
            item["maximum_age"] = body.xpath('//*[@id="info-page"]/div[2]/div/ul[2]/li[1]/dd').extract()
            item["minimum_age"] = body.xpath('//*[@id="info-page"]/div[2]/div/ul[2]/li[2]/dd').extract()
            item["nearest_city"] = body.xpath('//*[@id="info-page"]/div[2]/div/ul[2]/li[3]/dd').extract()
            items.append(item)
            return items

检查出robots.txt,它应该允许抓取他们网站的大部分内容。但是在读完源代码之后我注意到了这一行:

这是否意味着即使它不在/robots.txt上仍然不被认为是允许的?我甚至在没有听机器人的情况下尝试过(看看是否有任何改变)并且没有发生任何不同的事情。但如果有人确实知道那个很酷的答案。

更新

发现当我改变时:start_urls到start_url它有效。 关于这一点的奇怪之处在于我已经将start_urls用于我的其他蜘蛛并且无论(s)如何都可以使用。不知道为什么它在这里改变任何东西

2 个答案:

答案 0 :(得分:0)

Bo scrapy标准蜘蛛类scrapy.spiders.Spider和类scrapy.spiders.CrawlSpider使用属性start_urls

来自official documentation

class MySpider(CrawlSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com']
    ...

class MySpider(scrapy.Spider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/1.html']
    ...

属性start_url未在任何地方使用。

答案 1 :(得分:0)

似乎网站您正在抓取与Scrapy默认用户代理无法正常工作。

确保网站可以抓取它们,如果他们可以同意与他们签订一些UA,以便他们知道这就是你。在scrapy中设置用户代理是设置user_agent spider属性的问题,例如:

class MySpider(Spider):
    user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"