The script (bên dưới) từ this hướng dẫn chứa hai start_urls
.Đoạn bắt đầu bóc lột
from scrapy.spider import Spider
from scrapy.selector import Selector
from dirbot.items import Website
class DmozSpider(Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/",
]
def parse(self, response):
"""
The lines below is a spider contract. For more info see:
http://doc.scrapy.org/en/latest/topics/contracts.html
@url http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/
@scrapes name
"""
sel = Selector(response)
sites = sel.xpath('//ul[@class="directory-url"]/li')
items = []
for site in sites:
item = Website()
item['name'] = site.xpath('a/text()').extract()
item['url'] = site.xpath('a/@href').extract()
item['description'] = site.xpath('text()').re('-\s[^\n]*\\r')
items.append(item)
return items
Nhưng tại sao nó chỉ xóa 2 trang web này? Tôi thấy allowed_domains = ["dmoz.org"]
nhưng hai trang này cũng chứa các liên kết đến các trang khác nằm trong phạm vi dmoz.org
tên miền! Tại sao nó không cạo chúng?
http://doc.scrapy.org/en/latest/topics/spiders.html nhưng quy tắc dành cho CrawlSpiders! tôi kế thừa từ BaseSpider! – DrStrangeLove
BaseSpider chỉ đi đến các URL bắt đầu được cung cấp, vì vậy tôi đoán câu trả lời ban đầu của tôi là một chút sai lầm. Xem http://doc.scrapy.org/en/latest/topics/spiders.html#basespider – Glenn
nhưng nó nói về start_urls: Các URL tiếp theo sẽ được tạo liên tiếp từ dữ liệu chứa trong URL bắt đầu. Tại sao nó không cạo những url tiếp theo? (tất nhiên, nếu những url đó nằm trong miền dmoz.org) – DrStrangeLove