当我运行scraper时,它从一个站点上刮下大约200条记录,而这个站点包含大约250条记录。我搞不清楚自己在创作过程中犯了什么错误。任何帮助都将不胜感激。你知道吗
import scrapy
class WiseowlItem(scrapy.Item):
Name = scrapy.Field()
Url= scrapy.Field()
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
class WiseowlspSpider(CrawlSpider):
name = "wiseowlsp"
allowed_domains = ['www.wiseowl.co.uk']
start_urls = ['http://www.wiseowl.co.uk/videos/']
rules = [Rule(LinkExtractor(restrict_xpaths='//li[@class="woMenuItem"]')),
Rule(LinkExtractor(restrict_xpaths='//div[@class="woPaging tac"]'),
callback='parse_items')]
def parse_items(self, response):
page = response.xpath('//div[@class="woVideoListRow"]')
for title in page:
AA = title.xpath('.//p[@class="woVideoListDefaultSeriesTitle"]/a/text()').extract()
BB = title.xpath('.//p[@class="woVideoListDefaultSeriesTitle"]/a/@href').extract()
yield {'Name':AA,'Url':BB}
如果我使用我要粘贴的样式,我会得到我想要的结果,但我希望避免使用Regex。你知道吗
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from wiseowl.items import WiseowlItem
class WiseowlspSpider(CrawlSpider):
name = "wiseowlsp"
allowed_domains = ["wiseowl.co.uk"]
start_urls = ['http://www.wiseowl.co.uk/videos/']
rules = [Rule(LinkExtractor(allow=('uk/videos/.*')),callback='parse_items', follow=True)]
def parse_items(self, response):
page = response.xpath('//div[@class="woVideoListRow"]')
for title in page:
item=WiseowlItem()
item["Name"] = title.xpath('.//p[@class="woVideoListDefaultSeriesTitle"]/a/text()').extract()
item["Url"] = title.xpath('.//p[@class="woVideoListDefaultSeriesTitle"]/a/@href').extract()
yield item
在这种情况下,restrict\u xpaths总是忽略第一页并从下一页开始刮取,直到它结束。我相信应该有任何方式或方法(在这个restrict\u xpaths模式中进行限制)应用第一页的哪些数据也可以被刮取。希望有人能推一把。你知道吗
我讨厌使用典型的
Rule
和LinkExtractor
,这很难理解,Scrapy自己做任何事情。你知道吗我总是喜欢使用
start_requests
方法,这是您的Spider的入口点对于您正在抓取的网站,我会首先在脑海中开发逻辑,然后将其翻译成代码。你知道吗
这是100%的工作代码。你知道吗
在
settings.py
写下这个现在你可以看到我的代码可以很容易地从上到下阅读,你可以理解它的逻辑。你知道吗
相关问题 更多 >
编程相关推荐