python爬虫bs4_Python爬虫系列-Xpath自如和bs4链家
爬完魔方之后,再接再厉爬取自如和链家,然后...不出意外的又失败了!在向右老师和羽恒大神的拯救下,终于把我从坑里挖了出来。虽然错的也还有点稀里糊涂的,但前事不忘,后事之师。下面把遇到的坑简单说一下。
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爬虫bs4_Python爬虫系列-Xpath自如和bs4链家相关推荐
- python爬虫requests源码链家_Python爬虫系列-Xpath自如和bs4链家
爬完魔方之后,再接再厉爬取自如和链家,然后...不出意外的又失败了!在向右老师和羽恒大神的拯救下,终于把我从坑里挖了出来.虽然错的也还有点稀里糊涂的,但前事不忘,后事之师.下面把遇到的坑简单说一下. ...
- 使用xpath解析爬取链家
使用xpath解析爬取链家 爬取链家 将数据存储到redis 爬取链家 from urllib import request from time import sleep from lxml impo ...
- Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)
Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细) 内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧 正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧 ...
- Python爬虫攻略(2)Selenium+多线程爬取链家网二手房信息
申明:本文对爬取的数据仅做学习使用,请勿使用爬取的数据做任何商业活动,侵删 前戏 安装Selenium: pip install selenium 如果下载速度较慢, 推荐使用国内源: pip ins ...
- xpath 解析,实战链家二手房项目
目的:为了获得二手房相关信息(包括小区,地址,户型,年份,价格等) 1.获取网页数据 import requests from lxml import html etree = html.etreeh ...
- python爬取南京市房价_15python成功爬取链家网济南历下区名士豪庭小区房价
import requests from lxml import etree import time import random import csv class LianjiaSpider(obje ...
- 分享系列--面试JAVA架构师--链家网
本月7日去了一趟链家网面试,虽然没有面上,但仍有不少收获,在此做个简单的分享,当然了主要是分享给自己,让大家见笑了.因为这次是第一次面试JAVA网站架构师相关的职位,还是有些心虚的,毕竟之前大部分时间 ...
- 教你用python制作一个爬虫软件,城市二手房信息一览无余。
近年来随着我国二手房市场的逐渐放开,进入市场的二手房数量不断增加,二手房交易规模不断扩大,市场规模也在不断增长.数据显示,截至2018年末,我国累计二手房交易金额已经超过30万亿元:2019年我国二手 ...
- 【Python爬虫】爬虫实战
今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...
最新文章
- BaaS, IaaS, PaaS, SaaS介绍
- i2c的时钟延展问题
- android studio 第一个程序显示radle d 'https://services.gradle.org/distributions/gradle-5.4.1-all.zip'.
- ubuntu16.04搞出百度的方法
- Linux服务器运维安全策略
- 从wait_type入手模拟SQL Server Lock
- 大公司和小公司的比较
- 谈谈CountDownLatch和CyclicBarrier
- 深度学习的研究方向: 你会为AI转型么?
- Spring中使用 InitializingBean
- CSDN博客积分标准,包括博客勋章等
- WordPress仿站实战教程
- vue展示日历 考勤展示_Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示...
- 【练习赛】2022年高教杯数学建模C题(第一题的第一小问)
- Linux驱动开发(二)内核符号表
- windows录屏_电脑录屏软件哪个好用?试试这个专业方法
- 自己设计的一个首尾相接js轮播图
- 斗鱼直播Android开发二面被刷,跳槽薪资翻倍
- 用区块链构建可信教育——2020高校区块链技术创新云论坛集锦(1)
- 电脑方式,电脑学习方法
热门文章
- 计算机竞赛湖北有哪些,我校29名学生在全国大学生数学竞赛湖北赛区获奖
- 2018年计算机应用基础性考,2018年电大计算机应用基础核心课形考册
- android微信支付回调方法,Android接入支付宝和微信支付的方法
- Java案例:基于TCP的简单聊天程序
- 19.内在摄像机校准——介绍,理想与真实固有参数之比,改善内在参数_1
- jwt token注销_退出登录时怎样实现JWT Token失效?
- 会员编号生成规则_单据编号规则浅析
- 2017.9.14 仪仗队 思考记录
- 计算机网络学习笔记:第二章
- tomcat启动后访问404_伪Tomcat