如何在单击 CSV 文件中列出的多个页面的按钮后抓取表格?硒,Python
How to scrape tables after on click button for multiple pages listed in a CSV file? Selenium, Python
我想使用 pd.read_html 函数抓取 table 提供的多个 URL 中的所有信息。一个网站的例子是:https://www.top40.nl/10cc/10cc-donna-5867 我通过 csv 文件导入。
进入网站并单击选项卡 'Songinfo' 后,可以看到包含所有相关信息的 table。请在下面找到我的代码。 Python 给出错误:找不到 table 和/或无法从列表中解析。很高兴听到有关如何更正我的代码的任何建议:
df_list = []
with open(r"C:\Users\nlvijn02\Documents\Personal documents\Sony\Test_input_links.csv") as file:
reader = csv.reader(file)
for row in reader:
print(row[0])
driver.get(row[0])
driver.find_element_by_xpath("//a[@href='#songinfo']").click()
table = driver.find_elements_by_xpath("""//*[@id="songinfo"]/table""")
df_list.append(pd.read_html(table))
df = pd.concat(df_list)
driver.close()
df.to_csv("details.csv")
请在下面找到 table 的 HTML 代码:
<div id="songinfo" class="tab-pane active" aria-expanded="true"><h2>Songinformatie</h2><table class="table-songinfo"><tbody><tr><th>Artiest</th><td><a data-linktype="artist" href="https://www.top40.nl/top40-artiesten/10cc">10cc</a></td></tr><tr><th> </th><th style="text-align: left;">A-kant</th></tr><tr><th>Titel</th><td>
Donna </td></tr><tr><th>Lengte</th><td>
02:55
</td></tr><tr><th>Componist(en)</th><td>
Kevin Godley, Lol Creme
</td></tr><tr><th> </th><th style="text-align: left;">B-kant</th></tr><tr><th>Titel</th><td>
Hot Sun Rock
</td></tr><tr><th>Lengte</th><td>
03:00
</td></tr><tr><th>Componist(en)</th><td>
Eric Stewart, Graham Gouldman
</td></tr><tr><th colspan="2"> </th></tr><tr><th>Platenlabel</th><td>
UK
</td></tr><tr><th>Catalogusnr</th><td>
UK 6
</td></tr><tr><th>Hoogste positie UK</th><td>
2
</td></tr></tbody></table></div>
df_list = []
with open(r"C:\Users\nlvijn02\Documents\Personal documents\Sony\Test_input_links.csv") as file:
reader = csv.reader(file)
for row in reader:
print(row[0])
driver.get(row[0])
driver.find_element_by_xpath("//a[@href='#songinfo']").click()
table = driver.find_element_by_xpath("""//*[@id="songinfo"]/table""")
df_list.append(pd.read_html(table.get_attribute('outerHTML')))
df = pd.concat(df_list)
driver.close()
df.to_csv("details.csv")
我修改了你代码中的 2 行。
- find_elements_by_xpath => find_element_by_xpath
- table => table.get_attribute('outerHTML')
如果您测试我的代码并告诉我结果,我将非常高兴。
最好的问候
我想使用 pd.read_html 函数抓取 table 提供的多个 URL 中的所有信息。一个网站的例子是:https://www.top40.nl/10cc/10cc-donna-5867 我通过 csv 文件导入。
进入网站并单击选项卡 'Songinfo' 后,可以看到包含所有相关信息的 table。请在下面找到我的代码。 Python 给出错误:找不到 table 和/或无法从列表中解析。很高兴听到有关如何更正我的代码的任何建议:
df_list = []
with open(r"C:\Users\nlvijn02\Documents\Personal documents\Sony\Test_input_links.csv") as file:
reader = csv.reader(file)
for row in reader:
print(row[0])
driver.get(row[0])
driver.find_element_by_xpath("//a[@href='#songinfo']").click()
table = driver.find_elements_by_xpath("""//*[@id="songinfo"]/table""")
df_list.append(pd.read_html(table))
df = pd.concat(df_list)
driver.close()
df.to_csv("details.csv")
请在下面找到 table 的 HTML 代码:
<div id="songinfo" class="tab-pane active" aria-expanded="true"><h2>Songinformatie</h2><table class="table-songinfo"><tbody><tr><th>Artiest</th><td><a data-linktype="artist" href="https://www.top40.nl/top40-artiesten/10cc">10cc</a></td></tr><tr><th> </th><th style="text-align: left;">A-kant</th></tr><tr><th>Titel</th><td>
Donna </td></tr><tr><th>Lengte</th><td>
02:55
</td></tr><tr><th>Componist(en)</th><td>
Kevin Godley, Lol Creme
</td></tr><tr><th> </th><th style="text-align: left;">B-kant</th></tr><tr><th>Titel</th><td>
Hot Sun Rock
</td></tr><tr><th>Lengte</th><td>
03:00
</td></tr><tr><th>Componist(en)</th><td>
Eric Stewart, Graham Gouldman
</td></tr><tr><th colspan="2"> </th></tr><tr><th>Platenlabel</th><td>
UK
</td></tr><tr><th>Catalogusnr</th><td>
UK 6
</td></tr><tr><th>Hoogste positie UK</th><td>
2
</td></tr></tbody></table></div>
df_list = []
with open(r"C:\Users\nlvijn02\Documents\Personal documents\Sony\Test_input_links.csv") as file:
reader = csv.reader(file)
for row in reader:
print(row[0])
driver.get(row[0])
driver.find_element_by_xpath("//a[@href='#songinfo']").click()
table = driver.find_element_by_xpath("""//*[@id="songinfo"]/table""")
df_list.append(pd.read_html(table.get_attribute('outerHTML')))
df = pd.concat(df_list)
driver.close()
df.to_csv("details.csv")
我修改了你代码中的 2 行。
- find_elements_by_xpath => find_element_by_xpath
- table => table.get_attribute('outerHTML')
如果您测试我的代码并告诉我结果,我将非常高兴。 最好的问候