+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

由bs4和regex元素创建的pandas对象被打印为python列表

发布于2021-01-11 12:01     阅读(1016)     评论(0)     点赞(5)     收藏(3)


0

1

2

3

4

5

6

7

我正在从zoopla.co.uk抓取房屋数据

我正在获取所需的数据,但是三个元素正以python列表的形式打印到csv文件和数据帧中。这两个元素bathroomsbedrooms都是字符串,使他们得到正确打印,但通过使用正则表达式中发现,其他三个要素house_pricehouse_type以及station_distance打印为列表类型。

我应该不使用正则表达式而仅使用bs4吗?我不能只是简单地使用替换功能,对吗?提前致谢。

import requests
from bs4 import BeautifulSoup
import re
import pandas as pd

my_url = 'https://www.zoopla.co.uk/for-sale/property/b23/?page_size=100&q=B23&radius=0&results_sort=newest_listings&search_source=refine'
res = requests.get(my_url)
soup = BeautifulSoup(res.text, "html.parser")
lis = soup.find("ul", class_="listing-results clearfix js-gtm-list").find_all("li", class_="srp clearfix")

for li in lis:
    bedrooms = li.find("span", class_="num-beds")
    bathrooms = li.find("span", class_="num-baths")

    price = li.find("a", class_="text-price")
    house_price = re.findall('\£(\d+)', str(price))

    style = li.find("h2", class_="listing-results-attr")
    house_type = re.findall('(?<=bed ).*(?= for)', str(style))

    distance = li.find("li", class_="clearfix")
    station_distance = re.findall('\d+\.?\d*', str(distance))

    if bedrooms:
        bedrooms = bedrooms.get_text(strip=True)
    if bathrooms:
        bathrooms = bathrooms.get_text(strip=True)
    if house_price:
        house_price = house_price
    if house_type:
        house_type = house_type
    if station_distance:
        station_distance = station_distance

    df = pd.DataFrame({'house_price': house_price, 'house_type': house_type, 'station_distance': station_distance, 'bedrooms': bedrooms, 'bathrooms': bathrooms})
    print(df)

    df.to_csv('zoopla.csv')

输出量

house_price house_type  station_distance    bedrooms    bathrooms
0   [90]    [flat]  [0.2]   1   1
1   [210]   [detached house]    [0.6]   3   None
2   [160]   [end terrace house] [0.7]   2   1
3   [325]   [detached house]    [1.2]   4   1
4   [195]   [semi-detached house]   [1.1]   3   1

在此处输入图片说明


解决方案


它们像list一样打印,因为您使用的是findall

house_price = re.findall('\£(\d+)', str(price))
house_type = re.findall('(?<=bed ).*(?= for)', str(style))
station_distance = re.findall('\d+\.?\d*', str(distance))

您可以保留第一个元素(如果位于,位于每个元素内

house_price = house_price[0]
house_type = house_type[0]
station_distance = station_distance[0]

或尝试查找(就像您对浴室卧室所做的一样)。

0

1

2

3

4



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/757150/ba4d9037f03c4855c7d6/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0
收藏该文
已收藏

评论内容:(最多支持255个字符)