TJ1*_*TJ1 2 web-crawler scrapy web-scraping python-3.x
我很想知道是否可以抓取网站上任意深度的所有页面和链接,即使在跟踪几个链接后顶部 URL 发生变化?这是一个例子:
热门网址:www.topURL.com
有 3 个链接:www.topURL.com/link1、www.topURL.com/link2 和 www.topURL.com/link3
然后,如果我们点击 www.topURL.com/link1,它会将我们带到一个页面,该页面本身有
2 个链接:www.topURL.com/link4 和 www.topURL.com/link5
但如果我们点击 www.topURL.com/link4 ,它会将我们带到一个包含以下 2 个链接的页面:www.anotherURL.com/link1 和 www.thirdURL.com/link1
scrapy 或任何 python 爬虫/蜘蛛是否可以从 www.topURL.com 开始,然后跟踪链接并最终到达 www.thirdURL.com/link1?
它的深度有限制吗?有任何代码示例向我展示如何做到这一点吗?
谢谢您的帮助。
看一下scrapy的CrawlSpider
spider类
CrawlSpider 是最常用的爬行常规网站的蜘蛛,因为它通过定义一组规则提供了一种方便的跟踪链接的机制。
为了实现你的目标,你只需要设定非常基本的规则:
class MySpider(CrawlSpider):
name = 'example.com'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
rules = (
# Extract and follow all links!
Rule(LinkExtractor(callback='parse_item'), follow=True),
)
def parse_item(self, response):
self.log('crawling'.format(response.url))
Run Code Online (Sandbox Code Playgroud)
上面的爬虫会抓取网站上每一个与 allowed_domains 匹配的 url,并回调到parse_item
.
应该注意的是,默认情况下LinkeExtractor
会忽略媒体页面(如 pdf、mp4 等)
为了扩展深度主题,scrapy 确实有深度限制设置,但默认设置为 0(又名无限深度)
https://doc.scrapy.org/en/0.9/topics/settings.html#depth-limit
# settings.py
DEPTH_LIMIT = 0
Run Code Online (Sandbox Code Playgroud)
默认情况下,scrapy 也会优先抓取深度,但如果您想要更快的覆盖广度优先,可能会改进:https: //doc.scrapy.org/en/0.9/topics/settings.html#depth-limit
# settings.py
SCHEDULER_ORDER = 'BFO'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5565 次 |
最近记录: |