相信大家都入过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 存入.
''''
本文介绍了一种特殊的爬虫技术,针对网页上以图片形式显示的价格信息进行抓取和解析。通过分析网页源码定位图片URL及坐标,利用OCR技术识别价格,并结合XPath获取商品标题,最终形成结构化的数据。
8万+

被折叠的 条评论
为什么被折叠?



