爬虫实战-链家北京房租数据

爬虫实战-链家北京房租数据

本篇是对 恋习Python 发布的原创文章《北京房租大涨?6个维度,数万条数据帮你揭穿》中涉及的代码部分的解读。

< 在复现原文代码时,出现了一些报错,在本文中已进行了更改 >

1. 数据获取部分

把目前市场占有率最高的房屋中介公司为目标,来获取北京、上海两大城市的租房信息。
(目标链接:https://bj.lianjia.com/zufang/

整体思路是:

  • 先爬取每个区域的url和名称,跟主url拼接成一个完整的url,循环url列表,依次爬取每个区域的租房信息。
  • 再爬每个区域的租房信息时,找到最大的页码,遍历页码,依次爬取每一页的二手房信息。

这里用到的几个爬虫Python包:

  • requests: 就是用来请求对链家网进行访问的包
  • lxml: 解析网页,用xpath表达式与正则表达式一起来获取网页信息,相比bs4速度更快

1.1 导入包

import requests
import time
import re
from lxml import etree

1.2 获取某市区域的所有链接

headers:请求头
content.xpath:

headers = {
  'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}

对第一个正则表达式 "//dd[@data-index = '0']//div[@class='option-list']/a/text()" 的解读:

  • //dd 表示定位到html文本中字段头由 <dd 开头。
  • [@data-index = '0'] 表示定位到符合 data-index = '0' 这个条件的位置。
  • //div[@class='option-list']/a 同理向后搜寻,定位到以 <div 开头并且符合 class='option-list 这个条件的位置。
  • /text() 表示将上述位置后的文本内容抓取出来。

对第二个正则表达式 "//dd[@data-index = '0']//div[@class='option-list']/a/@href" 的解读:

  • 同样的代码解读同上。
  • /@href 表示在上述位置后,将 href 后面的内容抓取出来。
# 获取北京市区域的所有链接
def get_areas(url):
    print('start grabing areas')
    headers = {
  'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}
    response = requests.get(url, headers=headers)
    content = etree.HTML(response.text) # 使用etree来解析html文本
    areas = content.xpath("//dd[@data-index = '0']//div[@class='option-list']/a/text()") # content.xpath来获取北京市的各个辖区
    areas_link = content.xpath("//dd[@data-index = '0']//div[@class='option-list']/a/@href") # content.xpath来获取北京市的各辖区的链接(部分)
    for i in range(1,len(areas)): # 索引0对应的筛选条件是“不限”,即未区分辖区,故跳过
        area = areas[i]
        area_link = areas_link[i]
        link = 'https://bj.lianjia.com' + area_link # 北京市各辖区的第一页
        print(link)
        print("开始抓取页面")
        get_pages(area, link) # 调用get_pages函数

这个 get_areas 函数完成的任务是:

  • 获取了北京市各区域第一个页面的链接
  • 这个函数的输入是主函数输入的 url
  • 最后一个循环中需要调用 get_pages 函数

1.3 通过获取某一区域的页数,来拼接某一页的链接

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值