Python爬虫系列-途家

途家网不算很难爬,虽然它在同类网站中被我放到了最后。房间数用bs不算难取,而且城市列表也是用js很快就找到了。


1.png

这里就把新学到的两个知识点写一下:

2.png

首先是途家的js包有点怪,类似天气网的包,所以要用切片或者截取字符串的形式摘取字典。它的前面不但有var...等字符,最后还有一个分号,所以前后都要摘取。
这里我开始写的切片不对,请教yaung大神后应该是以下几种格式:
字符串格式,用replace语句

city_data=requests.get(url='https://www.tujia.com/Common/CityInfo/').content.decode('utf-8')
city_data=str(city_data).replace('var cityInfo = ','').replace(';', '')

print(city_data)
city_info=json.loads(city_data)
print(city_info['hotgroup'])

我后来改对的,用strip语句

city_data=str(city_data).lstrip('var cityInfo = ').rstrip(';')

切片格式:

city_data = str(city_data)[len('var cityInfo = '):-1]

我原来也是这种格式,但我犯了傻,一个个数字符,其实用len函数就好了嘛,而且也没有用‘-1’去把后面的分号去掉,所以改来改去都不对。

我是继续犯傻的分界线


然后把城市名调入网页url的格式,也还是没有掌握好,
一种是

city_id='sanya'
url='http://www.baidu.com?{}.html'.format(city_id)
print city_url 

这里我光是套入了{},忘了写format(明明以前的代码有示范),所以死活读不出来。
另外一个格式是用%s,这个书里有学,但还是不会活用。


city_id='sanya'
url='http://www.baidu.com?%s.html'
city_url=url % city_id

打印url是为了:一般构造完以后,测试时候先把构造的url打印一下,再请求。如果url都没有构造对,封装函数也是解析不出数据的。-by程工

按理说 requests.get(url).content 方法是返回的byte型源码,可以不用decode('utf-8'),但我这里就会报错,不知道是不是跟后面的犯傻有关。

附上部分代码,其他请求头那些就不再写了。

def get_city_room_num(city_temp):
    url = 'https://www.tujia.com/{city_temp}_gongyu/'.format(city_temp)
    html = requests.get(url, headers=get_headers()).content
    soup=BeautifulSoup(html,'html.parser')
    number = soup.find('div',attrs={'class': 'total-house-amount'})
    return number

url2 = 'https://www.tujia.com/***'
html=requests.get(url2,headers=get_headers()).content.decode('utf-8')
html=str(html).lstrip('var cityInfo = ').rstrip(';')
infos1=json.loads(html)
infos=infos1['citys']

今天其实还犯了第三件傻事,把一个很重要的json encoding文件删掉了。重装python以后也没找回来,pip安装都报错,最后装了anacoda搞掂。

希望明天人品好,不要在json上给我捣乱了,不然真的好花时间。
又学到了新的东西,还是挺高兴的~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,398评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,930评论 18 399
  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,601评论 1 46
  • 发心:我今不是为了我个人而闻思修,而是为了六道轮回一切如母有情众生,愿一切如母有情众生能够早日离苦得乐,清净业障,...
    晓茂阅读 1,235评论 3 3
  • Monica:长林君,你会不开心么? 长林君:我好像不知道什么叫不开心。 Monica:那,我想知道,你怎么处理情...
    思辨学院阅读 3,616评论 0 0