麻瓜编程python爬虫微专业_麻瓜编程·python实战·1-3作业:爬取租房信息

运行结果:

成功运行

我的代码:

from bs4 import BeautifulSoup

import requests

import time

# 建一个列表来收纳从聚合页面爬取到的所有信息页面

house_url = []

# urls是所有聚合页面的集合

urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(str(i)) for i in range(1,14)]

# 分析租房信息页面

def url_analysis(url):

time.sleep(2)

# 请求租房页面,并解析页面信息

web_data = requests.get(url)

soup = BeautifulSoup(web_data.text, 'lxml')

# 提取名称(titles)、地址(house_addrs)、价格(house_prices)、第一张房源图片(house_imgs)、

# 房东图片(owner_imgs)、房东性别(owner_sexes)、房东姓名(owner_names)

titles = soup.select('div.con_l > div.pho_info > h4 > em')

house_addrs = soup.select('div.con_l > div.pho_info > p > span')

house_prices = soup.select('div.day_l > span')

house_imgs = soup.select('img[id="curBigImage"]')

owner_imgs = soup.select('div.member_pic > a > img')

owner_sexes = soup.select('div.member_pic > div')

owner_names = soup.select('div.w_240 > h6 > a')

for title, add, price, img, pic, sex, name in \

zip(titles, house_addrs, house_prices, house_imgs, owner_imgs, owner_sexes, owner_names):

# 这里要注意考虑性别没有填写的情况

if sex.get('class')[0] == 'member_ico':

sex = '男'

elif sex.get('class')[0] == 'member_ico1':

sex = '女'

else:

sex = '保密'

# 把所有获取的信息汇总成一个词典

data = {

'title' : title.get_text(),

'add' : add.get_text().rstrip(),

'price' : '¥ '+price.get_text(),

'img' : img.get('src'),

'pic' : pic.get('src'),

'sex' : sex,

'name' : name.get_text()

}

print(data)

# 从聚合页面获取租房页面地址

def url_get(url):

time.sleep(3)

web_data = requests.get(url)

soup = BeautifulSoup(web_data.text, 'lxml')

house = soup.select('ul.pic_list.clearfix > li > a')

for urls in house:

urls = urls.get('href')

house_url.append(urls)

return house_url

#起点

for single_url in urls:

url_get(single_url)

print('总共爬取到',len(house_url),'条信息')

for each_url in house_url:

print('这是第',house_url.index(each_url) + 1,'条租房信息')

url_analysis(each_url)

我的感想:

用时接近3个小时(⊙o⊙)…

真的很怕运行到第100多条的时候报错(多谢群友提醒性别的if条件要分3个)

每个soup.select都是写一个打印一个(如果返回的是多个元素的打印 len() 比较实用),提取不出来就要改 CSS.selector

soup.select返回的都是列表,但其中的元素都是 bs4.tag

貌似以前看到过,用try、except来避免出错而中断运行

这边还有群友的一个关于性别的处理方式,用字典查询来替换if/else,另外也没有用for循环来迭代,而是直接切片(里面只有一个元素)

群友用的性别方法

一个悬而未决的问题:

为什么 sex.get() 返回的是一个列表 而 pic.get() 返回的是一个字符串呢??

悬而未决的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值