从具有类似xpath的网页中提取所有内容(可以在列表中提取的内容)

时间:2017-07-28 02:39:17

标签: python selenium xpath web-scraping

我必须抓住这个页面http://www.imdb.com/search/title?count=100&release_date=2016,2016&title_type=feature。 使用xpath时我可以刮掉电影名称,Z' The Lost City of Z'。这是代码:

  driver_t.get('http://www.imdb.com/search/title?count=100&release_date=2016,2016&title_type=feature')
  x= driver_t.find_element_by_xpath('//*[@id="main"]/div/div/div[3]/div[1]/div[3]/h3/a')
  print x.text

为了刮掉所有电影,我从xpath中删除了[1]

  driver_t.get('http://www.imdb.com/search/title?count=100&release_date=2016,2016&title_type=feature')
  x= driver_t.find_element_by_xpath('//*[@id="main"]/div/div/div[3]/div/div[3]/h3/a')
  print x.text

但是,输出只是第一部电影的名字('失落之城的Z')

这适用于' R'但它不适用于python(selenium webdriver)。有人能告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:0)

您想要range(复数元素)。

您还可以将xpath公式简化为:

find_elements_by_xpath

然后第一个和最后一个标题可用:

titles = driver.find_elements_by_xpath('.//h3[@class="lister-item-header"]//a')

然而,我注意到最后一部电影的完整标题是“Raw II'”。你可能认为有必要使用这样的东西,然后丢弃年份部分。

>>> titles[0].text
'The Lost City of Z'
>>> titles[99].text
'Raw'

答案 1 :(得分:0)

以下是您的问题的答案:

为了使用网址http://www.imdb.com/search/title?count=100&release_date=2016,2016&title_type=feature代替find_element_by_xpath从网页上抓取所有电影,我们将使用driver.find_elements_by_xpath来返回列表。接下来,我们将遍历列表并检索文本并逐个打印。以下是供您参考的代码块:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(chrome_options=options, executable_path="C:\\Utility\\BrowserDrivers\\chromedriver.exe")
driver.get("http://www.imdb.com/search/title?count=100&release_date=2016,2016&title_type=feature")
titles = driver.find_elements_by_xpath("//h3[@class='lister-item-header']/a")
for title in titles:
    movie_name = title.get_attribute("innerHTML")
    print(movie_name)

如果这回答你的问题,请告诉我。