1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 爬虫练习-爬取小猪短租网北京地区短租房信息

爬虫练习-爬取小猪短租网北京地区短租房信息

时间:2020-09-30 10:59:32

相关推荐

爬虫练习-爬取小猪短租网北京地区短租房信息

前言:

该项目较为简单,网页没有反爬,仅针对目标网页解析爬取所需信息(标题、地址、价格、房主头像、房主名字、房主性别)即可。

本文为整理代码,梳理思路,并验证代码的有效性——.12.7

环境:

Python3(Anaconda3)

PyCharm

Chrome浏览器

主要模块:

BeautifulSoup

requests

time

1.

/ # 第一页/search-duanzufang-p2-0/ # 第二页/search-duanzufang-p3-0/ # 第三页...

通过分析可知p后跟的数字即为页数,测试发现,虽然第一页的URL不同,但是可以测试发现通过URL/search-duanzufang-p1-0//也能访问到网页

暂且通过一种较直接了当的方法访问所有页面,通过上图可知,北京地区短租信息只有13页,所以我们对其遍历存为list类型就行

urls = ['/search-duanzufang-p{}-0//'.format(number) for number in range(1, 14)] # 构造多页URL

2.

获取每个房子的详情页链接,打开开发者工具查看可知链接位置

links = soup.find_all('a', class_='resule_img_a') # links为URL列表for link in links: # 循环出的URL,依次调用get_info()函数href = link.get("href")# print(href)get_info(href)

3.

解析所需数据,标题、地址、价格、房主头像、房主名字、房主性别

# 定义判断用户性别的函数def judgment_sex(class_name):if class_name == ['member_ico1']:return '女'else:return '男'# 解析出所需信息tittles = soup.select('div.pho_info > h4') # 标题addresses = soup.select('span.pr5') # 地址prices = soup.select('#pricePart > div.day_l > span') # 价格imgs=soup.select('#floatRightBox>div.js_box.clearfix>div.member_pic > a > img') # 房主头像names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a') # 房主名字sexs=soup.select('#floatRightBox>div.js_box.clearfix>div.member_pic > div') # 房主性别

注:这里的性别 在后面会调用judgment_sex()函数,返回‘男’或‘女’

4.

这里仅仅是简单的学习一下爬虫技术,就不做文件存储的功能,直接在控制台打印出来,这里用字典保存数据

for tittle, address, price, img, name, sex in zip(tittles, addresses, prices, imgs, names, sexs):data = {'tittle': tittle.get_text().strip(),'address': address.get_text().strip(),'price': price.get_text(),'img': img.get("src"),'name': name.get_text(),'sex': judgment_sex(sex.get("class"))}print(data) # 获取信息并通过字典的信息打印

A.数据截图

B.完整代码

#!/usr/bin/env python# -*- coding: utf-8 -*-#导入相应的库文件from bs4 import BeautifulSoupimport requestsimport time# 加入请求头headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36''(KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}# 定义判断用户性别的函数def judgment_sex(class_name):if class_name == ['member_ico1']:return '女'else:return '男'# 定义获取详细页URL的函数def get_links(url):wb_data = requests.get(url, headers=headers)print(url, wb_data.status_code)soup = BeautifulSoup(wb_data.text, 'lxml')links = soup.find_all('a', class_='resule_img_a') # links为URL列表print('len(links)=', len(links))for link in links: # 循环出的URL,依次调用get_info()函数href = link.get("href")# print(href)get_info(href)# 定义获取网页信息的函数def get_info(url):wb_data = requests.get(url, headers=headers)soup = BeautifulSoup(wb_data.text, 'lxml')# 解析出所需信息tittles = soup.select('div.pho_info > h4') # 标题addresses = soup.select('span.pr5') # 地址prices = soup.select('#pricePart > div.day_l > span') # 价格imgs=soup.select('#floatRightBox>div.js_box.clearfix>div.member_pic > a > img') # 房主头像names = soup.select('#floatRightBox > div.js_box.clearfix > div.w_240 > h6 > a') # 房主名字sexs=soup.select('#floatRightBox>div.js_box.clearfix>div.member_pic > div') # 房主性别for tittle, address, price, img, name, sex in zip(tittles, addresses, prices, imgs, names, sexs):data = {'tittle': tittle.get_text().strip(),'address': address.get_text().strip(),'price': price.get_text(),'img': img.get("src"),'name': name.get_text(),'sex': judgment_sex(sex.get("class"))}print(data) # 获取信息并通过字典的信息打印# 为程序的主入口if __name__ == '__main__':urls = ['/search-duanzufang-p{}-0//'.format(number) for number in range(1, 14)] # 构造多页URLfor single_url in urls:get_links(single_url) # 循环调用get_links()函数time.sleep(2) # 睡眠2秒

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。