Python 3.x BeautifulSoup绝对URL打印到CSV

Python 3.x BeautifulSoup绝对URL打印到CSV,python-3.x,beautifulsoup,urllib,Python 3.x,Beautifulsoup,Urllib,我已经在这里通过了大量的线程,看看我是否能找到一种方法来修复这段代码,但似乎不能完全让它工作。我正试图从一个网站抓取链接,然后写入csv。代码如下: 我找到了一种方法,获得了95%的成功率,但我缺少了一些东西,仅获得href: from bs4 import BeautifulSoup import urllib.request import urllib.parse import csv j = urllib.request.urlopen("htt

我已经在这里通过了大量的线程,看看我是否能找到一种方法来修复这段代码,但似乎不能完全让它工作。我正试图从一个网站抓取链接,然后写入csv。代码如下:

我找到了一种方法,获得了95%的成功率,但我缺少了一些东西,仅获得href:

    from bs4 import BeautifulSoup
    import urllib.request
    import urllib.parse
    import csv

    j = urllib.request.urlopen("http://cnn.com")
    soup = BeautifulSoup(j, "lxml") 
    data = soup.find_all('a', href=True)

    for url in soup.find_all('a', href=True):
#print(url.get('href'))

        with open('marcel.csv', 'w', newline='') as csvfile:
            write = csv.writer(csvfile)
            write.writerows(data)

我使用
openpyxl
获取它

from openpyxl import Workbook,load_workbook
我认为这很容易。 这是我项目的一部分,你可以试试

    def createExcel(self):
        wb = Workbook(optimized_write=True)
        ws = wb.create_sheet(title='书籍列表')
        row0 = ['编号','条码号','题名','责任者','借阅日期','归还日期','馆藏地']
        ws.append(row0)
        save_path = 'book_hist.xlsx'
        wb.save(save_path)

    def saveToExcel(self,data_list):
        wb = load_workbook(filename='book_hist.xlsx')
        ws = wb.get_sheet_by_name('书籍列表')
        for i in range(len(data_list)):
            ws.append(data_list[i])
        save_path = 'book_hist.xlsx'
        wb.save(save_path)

这可能是你想要做的

from bs4 import BeautifulSoup
import requests #better than urllib
import csv

j = requests.get("http://cnn.com").content
soup = BeautifulSoup(j, "lxml") 

data = []
for url in soup.find_all('a', href=True):
    print(url['href'])
    data.append(url['href'])

print(data)

with open("marcel.csv",'w') as csvfile:
    write = csv.writer(csvfile, delimiter = ' ')
    write.writerows(data)

对不起,也许我误解了你的话,所以我想出了95%的方法。我改变的是:这解决了它!谢谢:)为了便于理解,添加data=[]意味着?这只是意味着“创建一个在本例中命名为data的空列表”。通过这种方式,我们可以使用.append方法将其填充到循环中(如果列表还不存在,则此方法不起作用),是否有方法仅获取输出中的唯一值?我希望得到的是一个绝对链接的列表(例如,这里的抓取url)。但是一个没有重复值的列表。只需将
data=set(data)
添加到带有
之前。要获得绝对链接,请使用
if
语句连接
http://edition.cnn.com/
+以
/
开头的每个链接。