使用 beautifulsoup 在 Pandas 数据框中抓取问题/错误

Python初学者

我正在处理这个 csv ( https://www.kaggle.com/jtrofe/beer-recipes ),我想抓取数据框中的每个 URL,但我不能,因为我有问题/错误,我我无法抓取所有 URL,如果我尝试使用 1 个 URL,就可以了,但是该功能存在问题......有人可以帮助我吗?

这是我的代码:

import requests
from bs4 import BeautifulSoup
from time import sleep 


headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
}

base = 'https://www.brewersfriend.com'
links = [f'{base}{r}' for r in df['URL']]

while True:
    try:
        r = requests.get(links, headers=headers, stream=False, timeout=8).text
        break
    except:
        if r.status_code == 404:
            print("Client error")
            r.raise_for_status()
        sleep(1)


soup = BeautifulSoup(r, 'html5lib')

rating = soup.find('span', {'itemprop': 'ratingValue'})

DEFAULT_VALUE = 'NaN'

if rating is None:
    rating = DEFAULT_VALUE
    
print(rating.text)

我已经知道在某些页面中没有评级,所以我创建了不是数字的 DEFAULT_VALURE,但也可能是一个错误。

在这段代码之前有数据框,但我也不放。

我希望有一个人可以帮助我!

非常感谢

赤城88

这里各种乱七八糟的东西。我不会详细介绍所有内容,但我看到的一件事是您正在尝试print (rating.text)如果你的评分是'NaN',一个错误是你不能做rating.text

这不是我写的方式,而是开始你的初始编码:

import pandas as pd
import requests
from bs4 import BeautifulSoup
from time import sleep 


df = pd.read_csv('C:/recipeData/recipeData.csv', encoding = 'ISO-8859-1')
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}
base = 'https://www.brewersfriend.com'

links = [f'{base}{r}' for r in df['URL']]
for link in links:
    try:
        r = requests.get(link, headers=headers, stream=False, timeout=8)

        if r.status_code == 404:
            print("Client error")
            r.raise_for_status()
            continue
        else:
            r = r.text     
    except:
        continue


    soup = BeautifulSoup(r, 'html5lib')
    rating = soup.find('span', {'itemprop': 'ratingValue'}).text
    DEFAULT_VALUE = 'NaN'

    if rating is None:
        rating = DEFAULT_VALUE

    print('%s: %s' %(link,rating))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章