【问题标题】:For loop returning error when trying to loop through list with beauifulsoup尝试使用 beautifulsoup 遍历列表时,For 循环返回错误
【发布时间】:2021-05-03 17:56:17
【问题描述】:

我正在尝试创建一个循环,该循环将遍历位置并提取必要的数据并将其附加到其余位置。

感觉自己写的代码不错,但是一直报错:

AttributeError: 'NoneType' object has no attribute 'find_all'

但我知道不应该这样。

任何帮助将不胜感激。这是我的代码:

import urllib.request
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
import requests


locations = ['las-vegas-nv','denver-co']
for location in locations:
    headers = {
        'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
    }



    url = 'https://www.apartments.com/{location}/1-bedrooms/'
    page = requests.get(url, headers=headers)
    soup = bs(page.text, 'lxml')
    table = soup.find("table", class_="rentTrendGrid")
    rows = []

    for tr in table.find_all('tr'):
        rows.append([td.text for td in tr.find_all(['th', 'td'])])

#header_row = rows[0]
    rows = list(zip(*rows[0:])) # tranpose the table
    df = pd.DataFrame(rows[1:], columns=rows[0])
    df['City'] = location
    dfs.append(df)
    df = pd.concat(dfs).reset_index(drop = True)
print(df)

【问题讨论】:

  • 你在url = f'https://www.apartments.com/{location}/1-bedrooms/'中缺少f' '
  • 太好了,我知道这会很简单......非常感谢!

标签: pandas loops beautifulsoup


【解决方案1】:

Andrej 是对的,超级简单,只需将“f”放在前面。

import urllib.request
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
import requests


locations = ['las-vegas-nv','denver-co']
for location in locations:
    headers = {
        'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
    }



    url = f'https://www.apartments.com/{location}/1-bedrooms/'
    page = requests.get(url, headers=headers)
    soup = bs(page.text, 'lxml')
    table = soup.find("table", class_="rentTrendGrid")
    rows = []

    for tr in table.find_all('tr'):
        rows.append([td.text for td in tr.find_all(['th', 'td'])])

#header_row = rows[0]
    rows = list(zip(*rows[0:])) # tranpose the table
    df = pd.DataFrame(rows[1:], columns=rows[0])
    df['City'] = location
    dfs.append(df)
    df = pd.concat(dfs).reset_index(drop = True)
print(df)

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多