- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
无法弄清楚为什么 scrapy 中的 CrawlSpider 尽管设置了规则但不进行分页。
但是,如果将start_url更改为http://bitcoin.travel/listing-category/bitcoin-hotels-and-travel/并注释掉 parse_start_url 我为上面的页面抓取了更多项目。
我的目标是抓取所有类别。请知道我做错了什么吗?
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from bitcointravel.items import BitcointravelItem
class BitcoinSpider(CrawlSpider):
name = "bitcoin"
allowed_domains = ["bitcoin.travel"]
start_urls = [
"http://bitcoin.travel/categories/"
]
rules = (
# Extract links matching 'item.php' and parse them with the spider's method parse_item
Rule(LinkExtractor(allow=('.+/page/\d+/$'), restrict_xpaths=('//a[@class="next page-numbers"]'),),
callback='parse_items', follow=True),
)
def parse_start_url(self, response):
for sel in response.xpath("//ul[@class='maincat-list']/li"):
url = sel.xpath('a/@href').extract()[0]
if url == 'http://bitcoin.travel/listing-category/bitcoin-hotels-and-travel/':
# url = 'http://bitcoin.travel/listing-category/bitcoin-hotels-and-travel/'
yield scrapy.Request(url, callback=self.parse_items)
def parse_items(self, response):
self.logger.info('Hi, this is an item page! %s', response.url)
for sel in response.xpath("//div[@class='grido']"):
item = BitcointravelItem()
item['name'] = sel.xpath('a/@title').extract()
item['website'] = sel.xpath('a/@href').extract()
yield item
这就是结果
{'downloader/request_bytes': 574,
'downloader/request_count': 2,
'downloader/request_method_count/GET': 2,
'downloader/response_bytes': 98877,
'downloader/response_count': 2,
'downloader/response_status_count/200': 2,
'dupefilter/filtered': 3,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2016, 2, 15, 13, 44, 17, 37859),
'item_scraped_count': 24,
'log_count/DEBUG': 28,
'log_count/INFO': 8,
'request_depth_max': 1,
'response_received_count': 2,
'scheduler/dequeued': 2,
'scheduler/dequeued/memory': 2,
'scheduler/enqueued': 2,
'scheduler/enqueued/memory': 2,
'start_time': datetime.datetime(2016, 2, 15, 13, 44, 11, 250892)}
2016-02-15 14:44:17 [scrapy] INFO: Spider closed (finished)
项目数应该是 55 而不是 24
最佳答案
对于http://bitcoin.travel/listing-category/bitcoin-hotels-and-travel/ ,HTML 源包含与规则 '.+/page/\d+/$'
<a class='page-numbers' href='http://bitcoin.travel/listing-category/bitcoin-hotels-and-travel/page/2/'>2</a>
<a class='page-numbers' href='http://bitcoin.travel/listing-category/bitcoin-hotels-and-travel/page/3/'>3</a>
而http://bitcoin.travel/categories/不包含此类链接,主要包含其他类别页面的链接:
...
<li class="cat-item cat-item-227"><a href="http://bitcoin.travel/listing-category/bitcoin-food/bitcoin-coffee-tea-supplies/" title="The best Coffee & Tea Supplies businesses where you can spend your bitcoins!">Coffee & Tea Supplies</a> </li>
<li class="cat-item cat-item-50"><a href="http://bitcoin.travel/listing-category/bitcoin-food/bitcoin-cupcakes/" title="The best Cupcakes businesses where you can spend your bitcoins!">Cupcakes</a> </li>
<li class="cat-item cat-item-229"><a href="http://bitcoin.travel/listing-category/bitcoin-food/bitcoin-distilleries/" title="The best Distilleries businesses where you can spend your bitcoins!">Distilleries</a> </li>
...
如果您想抓取更多类别页面,则需要添加规则来抓取这些类别页面
关于python - Scrapy CrawlSpider 和 LinkExtractor 规则不适用于分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35411059/
我正在尝试抓取 Erowid 并收集有关体验的数据。我试图从有关药物的一般信息转化为实际体验本身。 但是 LinkExtractor 似乎无法正常工作。 import scrapy from scra
我正在研究 Scrapy 库并尝试制作一个小爬虫。 这是爬虫的规则: rules = ( Rule(LinkExtractor(restrict_xpaths='//div[@class="w
我的爬虫实现如下。 它正在运行,它将通过受 link extractor 监管的站点。 基本上我要做的是从页面的不同位置提取信息: - 类“新闻”下的 href 和 text()(如果存在) - 类“
我有一个这样的爬虫: class SkySpider(CrawlSpider): name = "spider_v1" allowed_domains = [ "ats
我正在使用 CrawlSpider 和 LinkExtractor 来抓取链接。 我如何将参数附加到 LinkExtractor 找到的链接?我想将 '?pag_sortorder=0&pag_per
我正在尝试从亚马逊抓取一个类别,但我在 Scrapy 中获得的链接与浏览器中的链接不同。现在,我正在尝试跟踪下一页,并在 Scrapy 中(将 response.body 打印到 txt 文件中)我看
with open('/home/timmy/myamazon/bannedasins.txt') as f: banned_asins = f.read().split('\n') clas
我正在尝试使用 Scrapy 从页面中提取所有链接,但我很难使用 LinkExtractor。我尝试了以下方法: import scrapy from scrapy.spiders import Cr
我是 scrapy 框架的新手,我看过一些使用 LinkExtractors 的教程和一些使用 SgmlLinkExtractor 的教程。我曾尝试寻找两者的差异/利弊,但结果并不令人满意。 谁能告诉
我正在使用一个 CrawlSpider,它使用链接提取递归地跟踪调用下一页的链接,例如: rules = (Rule(LinkExtractor( allow=(),\
因此,我传入一个 start_url,它是新闻文章页面(例如 cnn.com )。但是,我只想提取新闻文章本身,我不想跟踪文章页面上的任何链接。为此,我使用 CrawlSpider遵循以下规则: ru
我试图在 Scrapy 的 CrawlSpider 中限制每个 URL 的抓取页面数量。我有一个 start_urls 列表,我想对每个 URL 中抓取的页面数量设置限制。一旦达到限制,蜘蛛应该移动到
我无法让 LinkExtractor 在数据属性中查找链接。 HTML 看起来像这样: LinkExtractor 是这样的: LinkExtractor(allow=('us/support/',
无法弄清楚为什么 scrapy 中的 CrawlSpider 尽管设置了规则但不进行分页。 但是,如果将start_url更改为http://bitcoin.travel/listing-catego
所以我正在尝试使用 CrawlSpider 并理解 Scrapy Docs 中的以下示例: import scrapy from scrapy.spiders import CrawlSpider,
我致力于在网站上进行抓取,我使用 LinkExtractor 从 scrapy 抓取链接并确定其响应状态。 此外,我还想使用链接提取器从站点获取图像源。我有一个代码,它适用于网站网址,但我似乎无法获取
我致力于在网站上进行抓取,我使用 LinkExtractor 从 scrapy 抓取链接并确定其响应状态。 此外,我还想使用链接提取器从站点获取图像源。我有一个代码,它适用于网站网址,但我似乎无法获取
我正在尝试遵循网站的所有 css 样式表,例如https://www.thomann.de/de/index.html 我继承自 scrapy CrawlSpider 类并使用 LxmlLinkExt
我创建了一个简单的蜘蛛来抓取 disneyfoodblog.com 帖子并返回帖子标题和帖子永久链接。 我的项目没有显示任何错误。调试输出(见下文)显示所有起始链接都已访问,但这些页面上的链接没有被抓
我要抓取页面http://www.douban.com/tag/%E7%88%B1%E6%83%85/movie 。我的蜘蛛代码的一部分是: class MovieSpider(CrawlSpider
我是一名优秀的程序员,十分优秀!