如何使用scrapy
python库制作以下爬虫,递归地浏览整个网站:
class DmozSpider(BaseSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/"
]
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select('//ul[@class="directory-url"]/li/a/text()').extract()
for t in titles:
print "Title: ", t
我在单个页面上尝试过此操作:
start_urls = [
"http://www.dmoz.org/Society/Philosophy/Academic_Departments/Africa/"
]
它运行良好,但仅返回起始网址的结果,并且不跟踪域内的链接。
我想这必须使用 Scrapy
手动完成,但不知道如何操作。
最佳答案
尝试使用 CrawlSpider
(请参阅 documentation ),以及单个 Rule()
和仅在域上进行过滤的 LinkExtractor
您想要的(s):
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
class DmozSpider(CrawlSpider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/"
]
rules = (
Rule(
SgmlLinkExtractor(allow_domains=("dmoz.org",)),
callback='parse_page', follow=True
),
)
def parse_page(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select('//ul[@class="directory-url"]/li/a/text()').extract()
for t in titles:
print "Title: ", t
回调必须以 parse
以外的其他名称调用(请参阅 this warning )
关于python - 递归地浏览和抓取网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18221453/