转发有福利哦 Python实战 | 爬取北京海淀区一居室租房信息

又是一个周六,
祝大家一天好心情!
本次实战是爬取北京海淀区一居室的租房信息,共爬取了300套房源信息,效果如下:
开发环境
环境:MAC + .6
IDE:
模块: 、from bs4
爬取目标
本次爬取目标是北京海淀区一居室的租房信息,如下图所示 。这些信息主要包括标题,租金,小区名字,中介的头像以及姓名 。
爬取分析
本次需要爬取300套房源,但是某租房网站的每一页信息只有30套,如下 。因此我们需要爬取10个网页的信息,

转发有福利哦  Python实战 | 爬取北京海淀区一居室租房信息

文章插图
也就是爬取多个页面 。通过观察,我们发现第二个网址是pg2l1/,第三个是pg3l1/,因此得出网址的规律是pg2l1的页面以此加1 。
根据上面的分析,我们只需使用一个for循环就可以得到10个页面的信息,具体代码如下 。然后开始解析每一个页面
爬取一个页面
解析静态网页信息三步即可完成:
第一步
使用库中的get方法解析页面,但是为了防止被反爬虫,建议使用进行模拟浏览器 。否则你会得到下面的信息.
第一步代码如下:
`python`#第一步:使用GET获取页面请求#获取页面信息headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}data_url = requests.get(url,headers=headers)
第二步
是进行页面解析,找到需要的信息 。本次使用的是库 。Soup提供一些简单的、式的函数用来处理导航、搜索、修改分析树等功能 。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序,具体代码如下
转发有福利哦  Python实战 | 爬取北京海淀区一居室租房信息

文章插图
`python`#第二步:开始解析页面soup =BeautifulSoup(data_url.text,'lxml')#print(soup)
第三步
使用进行解析页面,找到租房信息的详细页面 。定位需要的信息数据,具体方法是鼠标放在图片上,右键,检查,copy-CSS。浏览器自动copy出来css样式,具体代码如下
`python`'''使用selector进行解析页面,找到租房信息的详细页面 。也就是进行页面的跳转'''#鼠标放在图片上,右键,检查,copy-CSS SELECTOR#一定要去掉:NTH-CHILD(1)否则出差错# house-lst > li:nth-child(1) > div.pic-panel > asoup_selects = soup.select('#house-lst > li > div.pic-panel > a')print(soup_selects)for soup_select in soup_selects:# selector返回的是一个列表,有很多属性信息,目的是链接,所以选择hrefhref_url = soup_select.get("href")#第三步,找到详细页面进行解析#print("得到详情页面信息")#print(href_url)get_detail_info(href_url)
爬取目标页面信息
由于详细的房租信息也是一个新的页面,所以需要进行再次的重复上面的三步,具体代码如下:
`python`#第一步: 使用URL获取页面detail_url = requests.get(url)#第二步:使用BS4解析数据detail_soup = BeautifulSoup(detail_url.text,'lxml')#第三步:使用 selecter 定位需要的信息数据#获取名称#body > div: nth - child(7) > div.title - wrapper > div > div.title > h1titles = detail_soup.select("body > div > div.title-wrapper > div > div.title > h1")#print("租房信息的标题是{}".format(titles))#获取地址addresses = detail_soup.select("body > div > div.overview > div.content.zf-content > div.zf-room > p > a")#print("小区名字是{}".format(addresses))#获取价格#body > div:nth-child(7) > div.overview > div.content.zf-content > div.price > span.totalprices = detail_soup.select("body > div > div.overview > div.content.zf-content > div.price > span.total")#print("租房在海淀区,一居室的价格是{}".format(prices))#获取图片##topImg > div.imgContainer > imgimages = detail_soup.select("#topImg > div.imgContainer > img")#获取中介头像# body > div: nth - child(7) > div.overview > div.content.zf - content > div.brokerInfo > a > imgavartars = detail_soup.select("body > div > div.overview > div.content.zf-content > div.brokerInfo > a > img")#获取中介姓名#body > div:nth-child(7) > div.overview > div.content.zf-content > div.brokerInfo > div > div.brokerName > a.name.LOGCLICKnames = detail_soup.select("body > div > div.overview > div.content.zf-content > div.brokerInfo > div > div.brokerName > a.name.LOGCLICK")#获取房东性别#sexs = address = detail_soup.select("#floatRightBox > div.js_box.clearfix > div.member_pic > div")