node_list = root.xpath("//*[@id="app"]/div/header/div[1]/div[1]/div[1]/text()")
时间: 2024-01-24 15:01:55 浏览: 129
这是一个XPath表达式,用于在HTML或XML文档中提取特定元素的文本内容。具体来说,它使用了XPath的通配符和属性匹配符来匹配具有特定id属性值的元素,并使用text()函数提取其文本内容。这个表达式的意思是,在id为"app"的元素下,找到一个div元素,它的header子元素下,再找到一个具有class属性为"div[1]/div[1]/div[1]"的元素,提取它的文本内容。不过需要注意的是,这个表达式中使用的双引号与Python代码中的双引号可能会有冲突,需要进行转义或使用单引号。
相关问题
为什么报错,说film_element出错?namexpath ='//*[@id="app"]/div/div[2]/ul/li[1]/a/div/div[2]/div/div[1]/span' scorexpath ='//*[@id="app"]/div/div[2]/ul/li[1]/a/div/div[2]/div/div[2]/span[2]' for number in range(1,121): allfilmxpath = f'//*[@id="app"]/div/div[2]/ul/li[{number}]/a' film_element = driver.find_element(By.XPATH, allfilmxpath) film_element.click() filmname = driver.find_element(By.XPATH,namexpath) score = driver.find_element(By.XPATH,scorexpath) print(filmname.text) print(score.text)
这个错误可能是由于在执行 `film_element.click()` 后,页面没有及时加载,导致无法找到 `namexpath` 和 `scorexpath` 元素而报错。你可以尝试在 `film_element.click()` 后添加等待代码,等待页面加载完全后再执行后续的代码。例如可以使用 `WebDriverWait` 类来等待特定元素的出现。可以尝试修改代码如下:
```
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
for number in range(1,121):
allfilmxpath = f'//*[@id="app"]/div/div[2]/ul/li[{number}]/a'
film_element = driver.find_element(By.XPATH, allfilmxpath)
film_element.click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, namexpath)))
filmname = driver.find_element(By.XPATH, namexpath)
score = driver.find_element(By.XPATH, scorexpath)
print(filmname.text)
print(score.text)
```
这里使用了 `WebDriverWait` 类来等待 `namexpath` 元素的出现,最大等待时间为 10 秒。如果 10 秒内该元素没有出现,则会抛出 `TimeoutException` 异常。如果你想等待其他元素,可以修改 `EC.presence_of_element_located` 参数中的元素定位器。
import requests from lxml import etree import pandas as pd username_list=[] film_critic_list=[] useful_num_list=[] useless_num_list=[] assess_list=[] ttt_all_urls = [] for i in range(191): ttt_page_urls = f'https://movie.douban.com/subject/26430107/reviews?sort=hotest&start={i * 20}' headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.41'} rq=requests.get(url=ttt_page_urls,headers=headers) dom1 = etree.HTML(rq.text) ttt_data = dom1.xpath('//*[@id="content"]/div/div[1]/div[1]/div/@data-cid') for i in ttt_data: a=dom1.xpath(f'//*[@id={i}]/div/h2/a/@href') ttt_all_urls.extend(a) for url1 in ttt_all_urls: for i in ttt_data: rq2 = requests.get(url=url1,headers=headers) dom2=etree.HTML(rq2.text) username= dom2.xpath(f'//*[@id={i}]/header/a[1]/span/text()') print(username) film_critic = dom2.xpath(f'//*[@id="link-report-{i}"]/div[1]/p/text()') useful_num = dom2.xpath(f'*[@id="review-{i}-content"]/div[3]/button[1]/text()') useless_num= dom2.xpath(f'*[@id="review-{i}-content"]/div[3]/button[2]/text()') assess = (dom2.xpath('//*[@id="content"]/div/div[1]/h1/span/text()')) username_list.extend(username) film_critic_list.extend(film_critic) useful_num_list.extend(useful_num) useless_num_list.extend(useless_num) assess_list.extend(assess) data={'username':username_list,'film_critic':film_critic_list,'useful_num':useful_num_list,'useless_num':useless_num_list,'assess':assess_list} df=pd.DataFrame(data) df.to_csv('fimldata.csv',encoding='utf-8',index=None)
这段代码的功能是爬取豆瓣电影《太空悍将》的影评信息,并将爬取到的数据保存到名为"fimldata.csv"的CSV文件中。具体来说,代码先构造了每一页的URL地址,然后通过requests库发送请求获取HTML页面。接着,使用lxml库中的etree模块对HTML页面进行解析,提取出每条影评的URL地址,并将这些地址保存到一个列表中。接下来,遍历所有影评的URL地址,再次使用requests和etree库对每个影评页面进行解析,提取出影评的作者、影评内容、有用数、无用数以及对应的电影名称。最后,将这些数据存储到一个字典中,并使用pandas库将字典转换为DataFrame格式后保存到CSV文件中。
阅读全文