私はコースの名前をUdacityから学生の人数でスクラップして、どのコースが最も人気があるのかを調べようとしています。私はアイテムのコードを作成するために管理します。私はもちろんの名前を取得していますが、代わりに学生数の私はのテキスト」数千人を取得していた結果インタラクティブウェブサイトを掻き立てる
import scrapy
from Udacity.items import UdacityItem
import re
class DmozSpider(scrapy.Spider):
name = "UdSpider"
allowed_domains = ["udacity.com"]
start_urls = ["https://www.udacity.com/courses/all"]
def parse(self, response):
sites = response.xpath('//h3/a')
for s in sites:
t=UdacityItem()
#name & url
t['name']=s.xpath('text()').extract()[0].strip()
url=response.urljoin(s.xpath('@href').extract()[0])
#request
req=scrapy.Request(url, callback=self.second)
req.meta['item']=t
#execute
yield req
def second(self,response):
t=response.meta['item']
strong =response.xpath('//strong[@data-course-student-count]/text()').extract()[0]
t['users']=strong
yield t
:
import scrapy
class UdacityItem(scrapy.Item):
name=scrapy.Field()
users=scrapy.Field()
とクモ'ブラウザでexample websiteを開くと、「千の」が基本値であり、後で(1〜2秒で)このテキストが適切な数値(私が取得したい)に変化していることがわかります。なぜ、この置換が起こっている
- :
そして、ここでは私の質問ですか?このJavaScriptコードですか?私は この変更の仕組みを理解したいと思います。
- 私はスクレイピーを使用して適切な人数をどのように獲得できますか?私はこれが可能であることを望む。
ありがとうございました。
親愛なるalecxe。返信してくれてありがとう。今私は解決策がありますが、私はまだHTMLの読み込みとAPIリクエストの送信との間のリンクは見られません。文書を見ると、そのコードを見つけることができません。 APIリクエストを行う必要があることをどのように理解していますか?私はJavaScriptコードがドキュメントの最後にロードされているコードに責任があると思いますか? – michalk
@michalk私はブラウザの開発ツールを使っています - ネットワークタブとフィルタされたXHRリクエストのみ。ページの読み込み中にいくつかのXHRリクエストがあり、それらを調べてレスポンス内のトータルの登録を見つけました。次に、Scrapy..hopeで同じリクエストを作成するのに役立ちました。 – alecxe