【问题标题】:beautiful soup web scrape美丽的汤网刮
【发布时间】:2020-09-28 22:29:38
【问题描述】:
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text)
print(soup.title)
print(soup.title.string)

r = requests.get 
('https://www.
street/
print(len(r.text))

现在我需要提取数据。

我尝试过这样的事情

results = soup.find_all('tr')
r = []
for count in range(0, 6): 
    k = k.next_sibling
    r.append(k.string)
    results.append(r)
print('Number of results', len(results))
    for row in range(0, len(results)):
print(results[row])

但这并没有给我任何回报。如何从网络中提取数据? 谢谢!

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup


    【解决方案1】:

    您可以使用trsoup.findAll("div", {"class":"tr"}) 获得所有div。这将返回该类的所有 div 容器。

    请注意,这些 div 还具有 html 属性中的数据,例如 data-unitdata-sizedata-price...,因此更容易抓取这些值

    代码:

    import requests
    import pandas as pd
    from bs4 import BeautifulSoup
    
    r = requests.get('https://www.cityrealty.com/nyc/roosevelt-island/rivercross-531-main-street/closing-history/57182')
    soup = BeautifulSoup(r.text, "html.parser")
    data = [
        t.attrs
        for t in soup.findAll("div", {"class":"tr"})
        if t.has_attr("data-unit")
    ]
    df = pd.DataFrame(data)
    del df['class']
    print(df)
    

    输出:

       data-unit data-size data-sizeft data-price data-priceft data-priceask   data-date data-total
    0       1916         3        1777    1175000          661       1250000  1587700800         84
    1       1612         2        1364    1150000          843       1250000  1580274000         84
    2        411         1         972     620000          638        640000  1580101200         84
    3       1003         3        1777    1131000          636       1245000  1577077200         84
    4       1411         1           -     682000            -             -  1576731600         84
    ..       ...       ...         ...        ...          ...           ...         ...        ...
    79      1403                     -      52877            -             -  1138683600         84
    80      1315                     -      54921            -             -  1135141200         84
    81       123                     -      52241            -             -  1093406400         84
    82      1915                     -      51037            -             -  1058932800         84
    83      1819                     -      53642            -             -  1049688000         84
    
    [84 rows x 8 columns]
    

    【讨论】:

    • 非常感谢!还有如何将其保存为 csv 文件?我已经尝试过以下操作: import csv with open('cityrealty.csv','w') as f: w=csv.writer(f) w.writerows(data.items()) //但这给了我一个属性错误
    • AttributeError Traceback(最近一次调用最后) 3 中,open('cityrealty.csv','w') as f: 4 w=csv .writer(f) ----> 5 w.writerows(data.items()) AttributeError: 'list' object has no attribute 'items'
    • 您可以将 pandas 数据框保存到 csv stackoverflow.com/questions/16923281/…
    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2020-12-13
    • 2019-03-13
    • 2014-05-28
    相关资源
    最近更新 更多