使用 selenium python 仅从文章中获得第一段(需要所有段落)
Got only first paragraph from article using selenium python (need all paragraphs)
我想从这篇文章中提取所有段落,但我设法只使用 selenium 获得了第一段 python。文章link是:
https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/
我这样做是为了练习,但无法提取整篇文章。
我已经尝试使用下面的代码来提取段落的确切部分:
post = driver.find_element_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p")
结果只得到第一段。我需要所有段落。
find_element_by_xpath 将 return 一个元素,所以你必须使用 find_elements_by_xpath到 return 所有匹配元素。
posts = driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p")
para = []
for p in driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p"):
para.append(p.text)
posts = " ".join(para)
这样试试:
content = ''
for (i in len(driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div/p"))):
content = content + driver.find_elements_by_xpath("(//div[@class='td-ss-main-content']/div/p)[" + str(i+1) + "]").text
print(content)
使用 and Python you have to induce WebDriverWait for the visibility_of_all_elements_located()
and you can use either of the following 从文章中提取所有段落:
使用CSS_SELECTOR
:
driver.get("https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/")
print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.td-post-content p")))])
使用XPATH
:
driver.get("https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/")
print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='td-post-content']//p")))])
控制台输出:
['DESAKAN pemimpin PKR, Hassan Abdul Karim yang mendesak Perdana Menteri Tun Mahathir Mohamad meletak jawatan ternyata tidak disambut rakan separtinya.', 'Setiasusaha Agung PKR, Datuk Seri Saifuddin Nasution Ismail berkata, Ahli Parlimen Pasir Gudang itu sepatutnya lebih menumpukan isu berkaitan rakyat.', 'Beliau telah menghubungi Hassan sebaik desakan tersebut dibuat semalam dan mahu menghentikan tindakan berkenaan.', 'Beliau juga telah menghubungi Hassan sebaik desakan tersebut dibuat semalam dan mahu menghentikan tindakan berkenaan.', '“Saya telah menghubungi beliau (Hasan) dan minta fokus kepada isu rakyat.', '“Tinggalkan ia kepada barisan kepemimpinan PKR,” katanya ketika ditemui pemberita di sini hari ini.', 'Hassan semalam mencadangkan Dr. Mahathir supaya meletak jawatan selepas apa yang didakwanya Perdana Menteri itu seperti hilang punca dan hilang daya dalam menyelesaikan beberapa isu kritikal negara.', 'Menurut Hassan, beliau adalah antara ahli Parlimen yang turut menandatangani surat sokongan kepada Tun Mahathir untuk dilantik sebagai Perdana Menteri selepas Pakatan Harapan berjaya membentuk kerajaan pada pilihan raya umum lalu.', 'Beliau juga menegaskan sumbangan negarawan berusia 94 tahun itu akan tetap dikenang dan dihormati. – 15 Ogos 2019.']
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
list = [p.text for p in self.driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p")]
paragraphs = "\n ".join(map(str, list))
我想从这篇文章中提取所有段落,但我设法只使用 selenium 获得了第一段 python。文章link是: https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/
我这样做是为了练习,但无法提取整篇文章。
我已经尝试使用下面的代码来提取段落的确切部分:
post = driver.find_element_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p")
结果只得到第一段。我需要所有段落。
find_element_by_xpath 将 return 一个元素,所以你必须使用 find_elements_by_xpath到 return 所有匹配元素。
posts = driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p")
para = []
for p in driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p"):
para.append(p.text)
posts = " ".join(para)
这样试试:
content = ''
for (i in len(driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div/p"))):
content = content + driver.find_elements_by_xpath("(//div[@class='td-ss-main-content']/div/p)[" + str(i+1) + "]").text
print(content)
使用visibility_of_all_elements_located()
and you can use either of the following
使用
CSS_SELECTOR
:driver.get("https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/") print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.td-post-content p")))])
使用
XPATH
:driver.get("https://nthqibord.com/2019/08/15/pemimpin-pkr-pertahan-tun-mahathir/") print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='td-post-content']//p")))])
控制台输出:
['DESAKAN pemimpin PKR, Hassan Abdul Karim yang mendesak Perdana Menteri Tun Mahathir Mohamad meletak jawatan ternyata tidak disambut rakan separtinya.', 'Setiasusaha Agung PKR, Datuk Seri Saifuddin Nasution Ismail berkata, Ahli Parlimen Pasir Gudang itu sepatutnya lebih menumpukan isu berkaitan rakyat.', 'Beliau telah menghubungi Hassan sebaik desakan tersebut dibuat semalam dan mahu menghentikan tindakan berkenaan.', 'Beliau juga telah menghubungi Hassan sebaik desakan tersebut dibuat semalam dan mahu menghentikan tindakan berkenaan.', '“Saya telah menghubungi beliau (Hasan) dan minta fokus kepada isu rakyat.', '“Tinggalkan ia kepada barisan kepemimpinan PKR,” katanya ketika ditemui pemberita di sini hari ini.', 'Hassan semalam mencadangkan Dr. Mahathir supaya meletak jawatan selepas apa yang didakwanya Perdana Menteri itu seperti hilang punca dan hilang daya dalam menyelesaikan beberapa isu kritikal negara.', 'Menurut Hassan, beliau adalah antara ahli Parlimen yang turut menandatangani surat sokongan kepada Tun Mahathir untuk dilantik sebagai Perdana Menteri selepas Pakatan Harapan berjaya membentuk kerajaan pada pilihan raya umum lalu.', 'Beliau juga menegaskan sumbangan negarawan berusia 94 tahun itu akan tetap dikenang dan dihormati. – 15 Ogos 2019.']
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
list = [p.text for p in self.driver.find_elements_by_xpath("//div[@class='td-ss-main-content']/div[@class='td-post-content']//p")]
paragraphs = "\n ".join(map(str, list))