导出结果到excel文件标题和链接请求python



我正在学习如何在python中抓取一些数据,下面是我的尝试:

import requests
from bs4 import BeautifulSoup
url = 'https://learndataanalysis.org/python-tutorial/page/10'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
links = [i['href'] for i in soup.select('h2.entry-title a')]
print(links)

代码获取网页的链接。我可以使用这一行来获取每个教程的标题:

[i.text for i in soup.select('h2.entry-title a')]

我怎样才能使链接和标题的列表,最后导出结果到excel文件?

简单地说,我需要一列作为文章的标题,另一列作为每篇文章的链接。

实际上你可以用一个列表推导式来做。

基本上,你所拥有的是正确的方法,你只需要使用列表推导来创建一个列表的列表。

对于soup.select返回的每个匹配,可以同时提取texthref

然后,使用csv模块,您可以将这个列表的列表传递给csv.writerows,以创建CSV文件,以便在Excel或其他工具中查看,数据处理等。

如果你想的话,你也可以选择在列表的列表前添加一个标题,例如['Title', 'URL']

下面是一个完整的工作示例:

from bs4 import BeautifulSoup
import csv
import requests
url = 'https://learndataanalysis.org/python-tutorial/page/10'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
data = [[i.text, i['href']] for i in soup.select('h2.entry-title a')]
# optional, if you want to add a header line
data.insert(0, ['Title', 'URL'])
with open('output_data.csv', 'w') as output_file:
writer = csv.writer(output_file, delimiter=',', quoting=csv.QUOTE_ALL)
writer.writerows(data)

请注意,csv.QUOTE_ALL并不是严格必需的,但是在所有字段上强制引用通常是一个好主意。


如果您想导出为XLSX格式,最好使用pandas模块:

import pandas as pd
df = pd.DataFrame(data, columns=['Title', 'URL'])
df.to_excel('output_data.xlsx')

默认情况下,这也将导出行号。如果你想省略它们,你可以使用pandas.ExcelWriter类,就像在这篇文章中一样。


编辑:

如果您还想提取日期,那么您可以使用单独的列表推导(因为日期信息完全在不同的HTML元素中)。

然后,您可以使用zip将这些信息组合在一起。

data = [[i.text, i['href']] for i in soup.select('h2.entry-title a')]
dates = [i.text for i in soup.select('span.published')]
data = [i + [j] for i, j in zip(data, dates)]

相关内容

  • 没有找到相关文章

最新更新