Scrapy SgmlLinkExtractor تتجاهل الروابط سمح
-
06-07-2019 - |
سؤال
يرجى إلقاء نظرة على هذا المثال العنكبوت في وثائق Scrapy. وتفسير ذلك:
<اقتباس فقرة>وهذا العنكبوت سيبدأ الزحف الصفحة الرئيسية example.com، وجمع الروابط الفئة، وصلات البند، تحليل هذا الأخير مع أسلوب parse_item. لكل استجابة البند، سيتم استخراج بعض البيانات من HTML باستخدام كسباث، والبند سوف يتم ملأ معها.
اقتباس فقرة>وأنا نسخ نفس العنكبوت بالضبط، واستبدال "example.com" مع رابط الأولي أخرى.
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from stb.items import StbItem
class StbSpider(CrawlSpider):
domain_name = "stb"
start_urls = ['http://www.stblaw.com/bios/MAlpuche.htm']
rules = (Rule(SgmlLinkExtractor(allow=(r'/bios/.\w+\.htm', )), callback='parse', follow=True), )
def parse(self, response):
hxs = HtmlXPathSelector(response)
item = StbItem()
item['JD'] = hxs.select('//td[@class="bodycopysmall"]').re('\d\d\d\d\sJ.D.')
return item
SPIDER = StbSpider()
ولكن بلدي العنكبوت "STB" لا تجمع الروابط من "/ السير /" كما يفترض أن تفعله. يعمل على رابط الأولي، الورطات وitem['JD']
ويكتب على ملف ومن ثم إنهاء.
لماذا يتم ذلك SgmlLinkExtractor
يتم تجاهل؟ تتم قراءة Rule
؛ لأنه يدرك أخطاء في بناء الجملة داخل الخط Rule
.
وهذا هو الخلل؟ هناك شيء خاطئ في قانون بلدي؟ لا توجد أية أخطاء باستثناء حفنة أخطاء غير معالج أن أرى مع كل تشغيل.
وسيكون من الجميل أن نعرف ما أقوم به خطأ هنا. شكرا لأي أدلة. أنا سوء الفهم ما يفترض SgmlLinkExtractor
أن تفعل؟
المحلول
ويتم تنفيذ وظيفة parse
فعلا وتستخدم في فئة CrawlSpider، وكنت تجاوز ذلك عن غير قصد. إذا قمت بتغيير الاسم إلى شيء آخر، مثل parse_item
، ثم حكم يجب أن تعمل.