一、相关网站
二、相关代码
import requests
from lxml import etree
import csv
with open('房天下数据.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['名称', '地点','价格','总价','联系电话']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for page in range(1,33):
response = requests.get(f'https://newhouse.fang.com/house/s/b9{page}/')
result = etree.HTML(response.text)
names = [name.strip() for name in result.xpath('//div[@class="nlcd_name"]/a/text()')]
addreses = result.xpath('//div[@class="address"]/a/@title')
prices = [price.xpath('string(.)').strip() for price in result.xpath('//div[@class="nhouse_price"]')]
total_prices = result.xpath('//p[@class="zj_price"]/text()')
phone_texts = result.xpath('//div[@class="tel"]/p/text()')
# 定义一个函数用于检查电话号码是否有效(这里仅作为示例,您可以根据实际需求定义有效性)
def is_valid_phone_number(phone_number):
# 这里可以根据实际情况编写验证规则
# 例如,简单地检查长度大于0
return bool(phone_number.strip())
# 合并电话号码和分机号,并用'转'连接
phones = ['{}转{}'.format(phone_texts[i].strip(), phone_texts[i+1].strip())
if is_valid_phone_number(phone_texts[i]) and is_valid_phone_number(phone_texts[i+1])
else "NAN"
for i in range(0, len(phone_texts)-1, 2)]
# print(names,addreses,prices,total_prices,phones)
for nam,add,pri,topr,pho in zip(names,addreses,prices,total_prices,phones):
print(f'{nam} ====== {add} ====== {pri} ====== {topr} ===== {pho}')
writer.writerow({'名称': nam, '地点': add,'价格':pri,'总价':topr,'联系电话':pho})
三、获取结果
版权声明和免责声明 本博客提供的所有爬虫代码和相关内容(以下简称“内容”)仅供参考和学习之用。任何使用或依赖这些内容的风险均由使用者自行承担。我(博客所有者)不对因使用这些内容而产生的任何直接或间接损失承担责任。 严禁将本博客提供的爬虫代码用于任何违法、不道德或侵犯第三方权益的活动。使用者应当遵守所有适用的法律法规,包括但不限于数据保护法、隐私权法和知识产权法。 如果您选择使用本博客的爬虫代码,您应当确保您的使用行为符合所有相关法律法规,并且不会损害任何人的合法权益。在任何情况下,我(博客所有者)均不对您的行为负责。 如果您对本声明有任何疑问,或者需要进一步的澄清,请通过我的联系方式与我联系。 |