seleniumを使ってajaxロードのページ情報を取得します.
10263 ワード
seleniumを使ってajaxロードのページ情報を取得します.実験サイト:豆瓣映画シナリオ は主にモジュールを使用します. selenium lxml(pip install lxml) 主要な構想:seleniumを使って、豆瓣ページに直接訪問するのは無理です.seleniumにjsスクリプトのスライドバーを実行させてこそ、豆瓣ページをリフレッシュさせて、必要な内容を得ることができます. コードは以下の通りです. selenium+chromeを使って操作の内容を直感的に見ることができます.爬虫を使って登るより直感的に見ることができます.
"""
selenium
"""
from selenium import webdriver
from lxml import etree
import time
import json
class DouBanMovieSelenium:
"""
"""
def __init__(self):
self.url = "https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action="
self.driver = webdriver.Chrome("F:\python \chromedriver.exe")
def load_page(self):
"""
"""
self.driver.get(self.url)
time.sleep(3)
# 1000
js = "window.scrollBy(0, 1000)"
#
# js = "window.scrollTo(0,document.body.scrollHeight)"
self.driver.execute_script(js)
time.sleep(3)
# self.driver.save_screenshot("1.jpg")
# time.sleep(1)
self.driver.execute_script(js)
time.sleep(3)
# self.driver.save_screenshot("2.jpg")
self.parse_page(self.driver.page_source)
def parse_page(self, html):
"""
,
html: html
"""
text = etree.HTML(html)
node_list = text.xpath('//div[contains(@class,"movie-list-item")]')
# print(len(node_list))
movie_list = []
for node in node_list:
title = node.xpath('.//div[@class="movie-name"]/span[1]/a')[0].text
# rank = node.xpath('.//div[@class="movie-name"]/span[3]')[0].text
rank = node.xpath('.//span[@class="rank-num"]')[0].text
rating = node.xpath(".//span[@class='rating_num']")[0].text
movie_info = {
'title': title,
"rank": rank,
"rating": rating,
}
movie_list.append(movie_info)
self.write_info(movie_list)
def write_info(self, movie):
"""
movie:
"""
with open("../text/doubanmovie2.json", 'w', encoding="utf-8") as f:
f.write(json.dumps(movie, ensure_ascii=False))
return "success"
def close(self):
time.sleep(2)
self.driver.quit()
if __name__ == "__main__":
db = DouBanMovieSelenium()
db.load_page()
db.close()
締め括りをつける