lxml.html
は正しく解析します。バンドルされているHtmlXPathSelectorの代わりにそれを使用してください。中
import lxml.html as lxml
bad_html = """<a href="example.com/page1.html">Site1</a><br/>
<a href="example.com/page2.html">Site2</a><br/>
<a href="example.com/page3.html">Site3</a><br/>"""
tree = lxml.fromstring(bad_html)
for link in tree.iterfind('a'):
print link.attrib['href']
結果:あなたはCrawlSpiderでこのメソッドを使用したい場合は
example.com/page1.html
example.com/page2.html
example.com/page3.html
だから、あなただけの単純な(または複素数)を記述する必要がlink extractor。
例:
import lxml.html as lxml
class SimpleLinkExtractor:
extract_links(self, response):
tree = lxml.fromstring(response.body)
links = tree.xpath('a/@href')
return links
そして最新の規約により示唆されるように...あなたのクモに
class MySpider(CrawlSpider):
name = 'example.com'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com']
rules = (
Rule(SimpleLinkExtractor(), callback='parse_item'),
)
# etc ...
+1です。はい、あなたは正しいですが、これはまた、治療コードベースで修正される必要があります。 – Medorator