lawrence1357 发表于 2020-7-31 01:11:29

BeautifulSoup

本帖最后由 lawrence1357 于 2020-7-31 02:09 编辑

import requests
import bs4
import re

url = r'https://tongling.anjuke.com/sale/zongyangxian/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}


req = requests.get(url, headers=headers)

soup = bs4.BeautifulSoup(req.text, 'html.parser')

target_housetitle = soup.find_all('div', class_="house-title")
target_detailsitem = soup.find_all('div', class_="details-item")
target_commaddress = soup.find_all('span', class_="comm-address")
target_proprice = soup.find_all('div', class_="pro-price")
target_itemimg = soup.find_all('div', class_="item-img")

for tar in target_detailsitem:
   print(tar)

----------------打印结果---------------------------
3室2厅|120m2|低层(共16层)|2019年建造



                  枞阳碧桂园  
                  枞阳县-汉武生态园-东湖路,近蒲洲路               


3室2厅|130m2|低层(共17层)|2014年建造



                  华翔观天下  
                  枞阳县-汉武生态园-金山大道               


3室2厅|129m2|低层(共17层)|2017年建造
                        ...
                        ...
                        ...
----------------打印结果---------------------------


1.请问这个里面的换行,空格还有特殊的字符为什么替换不掉呢?

2.target_detailsitem = soup.find_all('div', class_="details-item")
target_commaddress = soup.find_all('span', class_="comm-address"),这两句对应的源码是:
-----------------------------------------------------------------------------------------------------------------------
<div class="details-item">
<span class="comm-address" title="阳光国际城  枞阳县-汉武生态园-渡江路">
                  阳光国际城  
                  枞阳县-汉武生态园-渡江路                </span>
</div>
<div class="details-item">
<span>3室2厅</span><em class="spe-lines">|</em><span>134m2</span><em class="spe-lines">|</em><span>中层(共6层)</span><em class="spe-lines">|</em><span>2012年建造</span>
</div>
-----------------------------------------------------------------------------------------------------------------------
请问这种标签的class=“****”是一样的应该怎么写? target_commaddress = soup.find_all('span', class_="comm-address")这个写法对吗?

因为用target_detailsitem = soup.find_all('div', class_="details-item")这句的话,
target_detailsitem.span.text的话,阳光国际城  枞阳县-汉武生态园-渡江路也会被打印出来

Twilight6 发表于 2020-7-31 07:49:36

1.请问这个里面的换行,空格还有特殊的字符为什么替换不掉呢?



可以替换调呀,你试试运行:
import requests
import bs4
import re

url = r'https://tongling.anjuke.com/sale/zongyangxian/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}


req = requests.get(url, headers=headers)

soup = bs4.BeautifulSoup(req.text, 'html.parser')

target_housetitle = soup.find_all('div', class_="house-title")
target_detailsitem = soup.find_all('div', class_="details-item")
target_commaddress = soup.find_all('span', class_="comm-address")
target_proprice = soup.find_all('div', class_="pro-price")
target_itemimg = soup.find_all('div', class_="item-img")

for tar in target_detailsitem:
   print(tar.text.replace('\n','').replace(' ',''))

请问这种标签的class=“****”是一样的应该怎么写? target_commaddress = soup.find_all('span', class_="comm-address")这个写法对吗?

你这样写可以

target_detailsitem.span.text的话,阳光国际城  枞阳县-汉武生态园-渡江路也会被打印出来

你想提取哪些数据?


lawrence1357 发表于 2020-7-31 15:17:25

Twilight6 发表于 2020-7-31 07:49
可以替换调呀,你试试运行:




for a in target_detailsitem:
    x=a.text
    x.replace('\n', '')
    print(x)
那为什么这样写就替换不掉了呢

Twilight6 发表于 2020-8-1 09:27:57

lawrence1357 发表于 2020-7-31 15:17
for a in target_detailsitem:
    x=a.text
    x.replace('\n', '')


替换后的字符串要重新赋值,不是在原字符串上直接进行替换的:

改成这样:
for a in target_detailsitem:
    x=a.text
    x = x.replace('\n', '')
    print(x)
页: [1]
查看完整版本: BeautifulSoup