python爬虫小项目---自如网价格的一些思路

相信大家都入过pytesseract,PIL,的tesseract等库的坑吧,
一入大坑深似海啊…

这里呢我总结了一下我个人的思路, 代码没有去做封装, 只是简单的去 做了一个价格的爬取.

import requests
import re
import json
from lxml import etree
import time
from chaojiying import Chaojiying_Client
# 每页请求的地址
url2 = 'http://www.ziroom.com/z/nl/z3.html?p=0'
# url = 'http://www.ziroom.com/z/vr/61610357.html'
# 构造请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}
# 获取数据
res = requests.get(url=url2,headers=headers)
html = res.text
# 正则匹配 图片地址
roomid = re.findall(r'var ROOM_PRICE = (.*?);',html)[0]
# 转为python类型字典
roomid = json.loads(roomid)
#拼接不完整的图片地址
image_url = 'http:' + roomid['image']
# 取到匹配到的图片地址的  所对应的价格的坐标
zuobiao = roomid['offset']
# 请求图片地址
bsa = requests.get(image_url)
# 时间戳拼接 图片名称
filename = str(time.time()) + '.png'
# 以二进制写入图片 下载保存_______>>>这里需要注意我们用的是requests 请求 所以 想要 保存图 必须再次get图片Url  然后用 bsa.content 写入
with open(filename,'wb') as f:
    f.write(bsa.content)

'''将验证码通过打码平台获取验证码内容  返回一个字符串'''
chaojiyi2 = Chaojiying_Client('ipython','123456789','5000')
im = open(filename,'rb').read()
code = chaojiyi2.PostPic(im,5000)
filetext = list(code['pic_str'])
#循环坐标 作为索引 取出 价格并 保存为str
zuobiaolist = []
for i in zuobiao:
    str = ''
    for var in i :
        text = filetext[var]
        str+=text
    zuobiaolist.append(str)
# xpath 匹配  先将HTML 转为文档 xml
html1 = etree.HTML(html)
# 匹配出标题
titledict = []
title = html1.xpath('//div[@class="txt"]//a/text()')
for aa in title:
    titledict.append(aa)
links = zip(zuobiaolist,titledict)
items = []
for link in links:
    item = {}
    title = link[-1]
    print(title)
    price = link[0]
    print(price)
    item['title'] = title
    item['price'] = price
    items.append(item)
json.dump(items,open('rujia.json','w',encoding='utf-8'),ensure_ascii=False,indent=4)

'''
爬取思路:
1. 分析页面 ,价格没有  通过分析是用图片通过css来截取的价格位置,并需要我们使用 解码图片的手段进行读取价格数字.
2. 这样我们 首要的就是通过源码找到图片的地址,和它所对应的坐标位置,并解析图片上的数字, 用相对应的坐标作为索引拿取出我们需要的价格.
3. 分析页面属于,局部刷新 还是页面刷新  拿取并且构造每一页的地址.
4. 拿到字地址 循环拼接url  使用re或xpath或bs4去匹配.拿取出我们需要的数据.这里price和title  它们是不在同一个标签内  所以我们是分开去获取的,
    但是我们如果存为jSON 格式 或者入库  是需要它们一一对应, 所以使用了一个 内置函数zip()  将分别取出来的数据 去对应它们正确的名称和价格, 最后使用  JSON.dump  存入.
    ''''


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lonelypatients°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值