首页 > 解决方案 > 在 BeautifulSoup 中循环

问题描述

我正在使用python在一个知道的url中循环一个“键”列表并提取为输出。为此,我定义了一个get_urls(key)函数,然后循环 trough key。你可以在这里看到我的示例代码:

import urllib3
import requests
urllib3.disable_warnings()
from bs4 import BeautifulSoup
import pandas as pd

def get_urls(key):
    url = f'https://aurl.com/{key}#ltr-{key}'
    r = requests.get(url,proxies=proxies, verify=False)
    soup = BeautifulSoup(r.content, "html.parser")

    for a in soup.find_all('a', href=True):
        z=print(a['href'])
    return z

key = ['C','B']

urllist = []
for key in key:
    urllist.append(get_urls(key))

dflinks = pd.DataFrame(urllist) 
path = 'D://mycsv.csv'
dflinks.to_csv(path,index=False)

代码的第一部分似乎正在完成这项工作,因为我在out. 但是,将这些 url 保存到 csv 时一定会出错,因为当我打开所需的文件时,它原来是空的。

我知道我一定是在这里犯了一个非常基本的错误,我正在学习 python,非常感谢您的反馈。我相信你会很快发现它:)

编辑:其他不起作用的东西:

另一种不起作用的策略是将代码上方的行替换为:

linklist = []
    for a in soup.find_all('a', href=True):
        z=linklist.append(a['href'])
    return z

标签: pythonloopscsvbeautifulsoupexport-to-csv

解决方案


你没有返回你想要的:

z = linklist.append(a['href'])

.append()返回None。它是一个 void 函数,您可以调用它来在列表中附加一个值。另外,你要回来了z。尝试返回linklist您创建的:

linklist = []
for a in soup.find_all('a', href=True):
    linklist.append(a['href'])
return linklist

您还可以尝试更 Python 的代码,但这是可选的:

return [ a['href'] for a in soup.find_all('a', href=True) ]

推荐阅读