所以我是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)如何都可以使用。不知道为什么它在这里改变任何东西
答案 0 :(得分:0)
Bo scrapy标准蜘蛛类scrapy.spiders.Spider
和类scrapy.spiders.CrawlSpider
使用属性start_urls
。
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"