将结果导出到excel文件标题和链接请求python
我正在培训如何使用python获取一些数据,下面是我的尝试:将结果导出到excel文件标题和链接请求python,python,excel,csv,beautifulsoup,python-requests,Python,Excel,Csv,Beautifulsoup,Python Requests,我正在培训如何使用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.entr
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返回的每个匹配项,您可以同时提取文本和href
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)]
然后,使用该模块,您可以将此列表传递给创建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格式,最好使用该模块:
import pandas as pd
df = pd.DataFrame(data, columns=['Title', 'URL'])
df.to_excel('output_data.xlsx')
默认情况下,这也将导出行号。如果希望省略它们,可以使用该类,如中所示
编辑:
如果您还想提取日期,那么可以通过单独的列表理解来完成(因为日期信息完全位于不同的HTML元素中)
然后,可以使用将信息组合在一起
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)]
@你能看一下吗?太棒了。非常感谢你。我会仔细学习代码,以便学习我不知道的新技能。是否可以使用理解添加第三项。我的意思是,如果我需要通过编辑这行data=[[I.text,I['href']]为我在汤中添加文章的日期。选择('h2.entry-title a')]
?@yasserkalil-sure,我已经更新了答案以同时提取日期。@yasserkalil-sure,它将以同样的方式工作,而不是[I.text,I['href']]
对于所需的任何额外
字段,它都类似于[i.text,i['href'],extra]
。每个内部列表成为文件的一行,您可以根据需要添加任意多的列。非常感谢。顺致敬意,