私はPythonで新しく、の治療にのURLをたどるのに苦労しています。私はそれがxpath
仕様であるかもしれないと思うが、トピックに関するいくつかのチュートリアルを行った後、私はこれを解決することに近づくことはない。参照されたテーブルのURLをループし、開始ページから繰り返しコンテンツをスクレイプします。私は間違って何をしていますか?Python Scrapy XpathがURLに従っていない
添付コード:
import scrapy
from scrapy.selector import Selector
from scrapy.spiders import CrawlSpider
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http import Request
class MySpider(CrawlSpider):
name = 'unespider'
allowed_domains = ['https://my.une.edu.au/']
start_urls = ['https://my.une.edu.au/courses/']
rules = Rule(LinkExtractor(canonicalize = True, unique = True), follow = True, callback = "parse"),
def parse(self, response):
hxs = Selector(response)
for url in response.xpath('//*'):
yield {
'title': url.xpath('//*[@id="main-content"]/div/h2/a/text()').extract_first(),
'avail': url.xpath('//*[@id="overviewTab-snapshotDiv"]/p[3]/a/text()').extract_first(),
}
for url in hxs.xpath('//tr/td/a/@href').extract():
yield Request(response.urljoin(url), callback=self.parse)
よく問題がたくさんあります。 'allowed_domains'はドメイン名を持ち、URLは' allowed_domains = ['my.une.edu.au'] 'ではありません。解析関数はクラスの内部にある必要があります。 'hxs = Selector(response)'を使う必要はありません。 'LinkExtractor'では、あなたはスパイダーがブラウザにしたいと思うリンクのためのパターンを与えるべきです。 'ルール(LinkExtractor(allow =(" https://my.une.edu.au/courses/2017/courses/.+ "、)、canonicalize = True、unique = True)、follow = True、callback =" parse_course ")'。 CrawlSpiderの 'parse'メソッドをオーバーライドしないでください。ルールがそれを行うなら、あなたの関数でRequestを返さないでください。 –
私に戻ってくれてありがとうございました。私はあなたが提案した変更を加えましたが、同様の動作を示します。つまり、テーブルのURLをループしますが、何もコピーしません。何が間違っているのか分かりません。 – DaveSim