爬完魔方之后,再接再厉爬取自如和链家,然后...不出意外的又失败了!在向右老师和羽恒大神的拯救下,终于把我从坑里挖了出来。虽然错的也还有点稀里糊涂的,但前事不忘,后事之师。下面把遇到的坑简单说一下。

xpath找自如

首先找到自如友家杭州站的地址,http://hz.ziroom.com/z/nl/z2.html

我觉得我也就是这个第一级的网址能找对了...

然后观察网址,找需要的标题,地址和价格

图片.png

下面是我写的程序

...

infos=selector.xpath('div//li[@class="clearfix"]/div/')

list_dict=[]

for info in infos:

item={}

name=info.xpath('div/h3/a/text()')[0]

address=info.xpath('div/h4/a/text()')[0]

price=info.xpath('p/[@class="price"]/text()')[0]

当时我的逻辑是,在chrome用小箭头找到每个房源的地址,得到class=clearfix这一级,然后向下。然后标题在txt下的“h3”处,地址在“h4”处,价格在另一个标签price处。然后就试着写下来,结果是运行不出来....

大神的诊断:一个是需要请求头伪装,另外就是地址还要取高一级,点选到所有的房源。

还有定位还不够准确,div要定到第二个,所以是div[2]。价格这里,因为二级结构Infos已经定位到价格,所以不要再写class=price这些了,直接用p[1]定位。

#coding:utf-8

import requests

from lxml import etree

import random

url='http://sz.ziroom.com/z/nl/z2.html'

def getReqHeaders():

"""

功能:随机获取HTTP_User_Agent

"""

user_agents=[

"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"]

user_agent = random.choice(user_agents)

req_headers={

'User-Agent':user_agent

}

return req_headers

html=requests.get(url,headers=getReqHeaders()).content

#print(html)

selector=etree.HTML(html)

infos=selector.xpath('//*[@id="houseList"]/li')

#print infos

list_dict=[]

for info in infos:

item={}

name=info.xpath('div[2]/h3/a/text()')[0]

address=info.xpath('div[2]/h4/a/text()')[0]

price=info.xpath('div[3]/p[1]/text()')[0]

print name, ' ',address, ' ',price

#item['name']=name

#item['address']=address

#item['price']=price

#list_dict.append(item)

#print list_dict

在地址向上一栏这里我纠结了很久,因为爬魔方的时候,程工教路,取值就是从clearfix这里取的,用小箭头点选单个公寓列表得到。而自如这里改为id这一级,从所有公寓列表选取。似乎逻辑不同呢,我要再好好想想...

html=requests.get(url).content

selector=etree.HTML(html)

infos=selector.xpath('//div[@class="orgs-room clearfix"]/div[2]')

for info in infos:

shop_name=info.xpath('p[@class="room-hd"]/a/text()')[0]

address=info.xpath('p[@class="address"]/text()')[0]

room_money=info.xpath('p[@class="room-money"]/strong/text()')[0].lstrip('均价:¥').rstrip('/月')

print shop_name,address,room_money

BeautifulSoup爬链家

试着用bs4爬链家,并且加上页数的循环。

其实链家的结构是公认很清晰的,用采集器爬的时候,什么跳转都不用。但是自己一写代码,就马上暴露学习的不足了...

图片.png

自己写的代码,有两个问题,一个是爬出来的都是单一房源,另一个是列表,无法用text找到。 比如写成"address=lj.find_all('div',attrs={'class':'address'}).text"就会报错。

(前略)

url='http://gz.lianjia.com/ershoufang/'

for i in range(1,2):

i=str(i)

a=(url+'pg'+i+'/')

html=requests.get(url=a).text

lista=[]

lj=BeautifulSoup(html, "lxml")

infos=lj.find_all('div',attrs={'class':'info clear'})

for info in infos:

item={}

title=lj.find_all('div',attrs={'class':'title'})

print type(title)

address=lj.find_all('div',attrs={'class':'address'})

price=lj.find_all('div',attrs={'class':'totalPrice'})

(以下略)

下面是向右老师改的代码:

import requests

from bs4 import BeautifulSoup

url='http://bj.lianjia.com/ershoufang/'

for i in range(1,3):

i=str(i)

a=(url+'pg'+i+'/')

print a

html=requests.get(url=a).content

lj=BeautifulSoup(html, "html.parser")

for info in lj.find_all('div', attrs={'class': 'info clear'}):

title = info.select('div.title > a')[0].get_text()

print title

price = info.select('div.priceInfo > div > span')[0].text

print price

loc = info.select('div.flood > div')[0].text

print loc

原因是,一个是没有把爬页数和下面的每页信息形成嵌套关系,所以爬出来的结果都是一样的;第二个还是网页结构没把握好,"class:info clear"这个二级结构倒是找到了,但是向右老师建议下面应该用select,find找到的是一类标签,用来定位比较复杂。select的好处,就是可以一层一层的找到标签。

比如总价'div.priceInfo > div > span'这里,也可以写成'div.priceinfo > div.totalPrice > span',span没有属性。

这样就比attr要清楚很多。

这个周末总算把两个网站结构又弄清楚了(虽然80%都是别人的功劳!)。另外看了天善智能邱祐玮的爬虫视频。看视频的时候觉得好简单啊,自己做的时候怎么就那么复杂!

第二级结构该取哪一级,还要好好弄明白。

第三级结构的定位,每次的排列组合,搞得我都没信心了,还是人品+技术问题,要练习再练习!

python爬虫requests源码链家_Python爬虫系列-Xpath自如和bs4链家相关推荐

  1. python爬虫bs4_Python爬虫系列-Xpath自如和bs4链家

    爬完魔方之后,再接再厉爬取自如和链家,然后...不出意外的又失败了!在向右老师和羽恒大神的拯救下,终于把我从坑里挖了出来.虽然错的也还有点稀里糊涂的,但前事不忘,后事之师.下面把遇到的坑简单说一下. ...

  2. python爬虫requests源码链家_Python 爬虫 链家二手房(自行输入城市爬取)

    因同事想在沈阳买房,对比分析沈阳各区的房价,让我帮忙爬取一下链家网相关数据,然后打 算记下笔记 用于总结学到的东西&用到的东西. 一.爬虫需要会什么? 学习东西 首先你要知道它是干嘛的.爬虫 ...

  3. python获取网页源码不完整_python和Ajax在一起了?真的???

    Ajax动态网页加载爬取新浪微博某关键词下的信息 前言 有些时候我们使用浏览器查看页面正常显示的数据与使用requests抓取页面html得到的数据不一致,这是因为requests获取的是原始的HTM ...

  4. python爬虫requests源码链家_python的爬虫项目(链家买二手房)

    不知不觉,已经工作6年有余,恍恍惚惚,有机会满足房子需求. 在收集房子信息过程中,做些记录. 贝壳的功能很强大,但很难满足小区.距离.教育.面积等多个方面的匹配,使用起来成本仍然较高. 针对以上情况, ...

  5. python爬虫requests源码链家_python数据分析实例:python抓取链家二手房源数据和分析...

    python语言,在数据分析方面,涵盖了"数据获取→数据处理→数据分析→数据可视化"这个流程中每个环节,不可不谓之为利器. 本篇文章我们就利用python语言在数据分析方面的应用, ...

  6. python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)

    爬取链家房价信息(未完待续) items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # ...

  7. python爬虫requests源码链家_python爬虫爬取链家二手房信息

    #coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...

  8. python爬虫requests源码链家_Python爬虫之---爬链家

    一个简单的实例,可以采用.做的demo. #!/usr/bin/python # -*- coding: utf-8 -*- # @Time : 2020/6/4 15:55 # @Author : ...

  9. python爬虫requests源码链家_链家房源爬虫(含源码)

    链家APP上有很多在售房源信息以及成交房源信息,如果可以把这些信息爬下来,可以得到很多有价值的信息.因此本文将讲一讲如何爬取这些数据,并保存下来供以后分析. 本文将介绍以下几个方面: 程序介绍该程序支 ...

最新文章

  1. MVP模式在Android实际项目中的应用和优化
  2. 使用 jQuery Mobile 与 HTML5 开发 Web App (三) —— jQuery Mobile 按钮
  3. C/C++ Memory Layout
  4. 利用cad计算型材的弹性模量_型材截面特性的CAD计算方法
  5. 怎么避免后台被搜索_优化亚马逊后台关键词的6个技巧,让买家快速找到你
  6. 强大!用 60 行代码自动抢微信红包
  7. MUI框架常用代码段
  8. Pycharm修改快捷键:后退键和前进键
  9. 【PHP面试题】请简述项目中优化SQL语句执行效率的方法,从哪些方面,SQL语句如何分析?
  10. 自动化的8种定位方式
  11. Xml字符串转Map
  12. React-Native: bios打开VT-x选项
  13. HBuilder开发旅游类APP(三) ----- 给APP添加底部导航栏(底部选项卡)
  14. SQLMAP进阶:参数讲解
  15. ubuntu安装QT依赖
  16. SSM整合(基于配置类整合
  17. HashMap 源码深度分析
  18. pc端常用的分享QQ、QQ空间、微信、微博、复制链接
  19. LeetCde_571、超级洗衣机
  20. git提交代码常用命令

热门文章

  1. python竖排版输出_Python 让美文竖排显示-高大上
  2. rstudio查询命令_【R教程】RStudio使用指南
  3. 使用satis自建私有镜像
  4. python决策树预测用户等级_使用python抓取婚恋网用户数据并用决策树生成自己择偶观...
  5. 敏捷项目管理-一文掌握SCRUM知识
  6. Altium Designer 使用技巧
  7. 计算机存储与I/O系统基础原理笔记
  8. 线性表基础实践:实现对员工进行信息管理(结构体基础运用)
  9. java中的scanner是什么_java中的Scanner类是什么?如何使用?
  10. uniApp开发安卓App调试与打包