python爬虫遇到字体反爬如何处理

  • 内容
  • 相关

遇到字体反爬如何处理

在爬虫中往往会碰到一些自定义字体的反爬,也就是在打开一个页面的时候,我们是可以看到对应的在页面是看的到的数据的,但是,通过检查发现在element中,我们是看不到真实的数据的,比如在猫眼电影中:

mao1.png

第一种解决的思路,是切换到手机版,看一下手机版的页面我们是否可以直接拿到数据,在猫眼电影中,我们可以直接切换到手机页面之后是可以找到数据的:

mao2.png

另外的一种解决方式就是可以使用selenium对页面截图,然后使用ocr(光学字符识别)来对图片中的文字进行识别。

关于OCR环境搭建请参考:【python的OCR中文字符识别

首先,我们可以先使用selenium来访问我们要抓取的网站,对网页进行截屏,然后,通过selenium定位元素的方法,找到对应的要进行截图的元素,获取元素x轴、y轴的坐标,以及元素的宽高,然后使用Pillow模块对元素进行截图。对应的我们就把要抓取的数据的截图拿到了,然后再使用ocr进行对图片中的文字进行识别。

下面以猫眼电影为例:

  • 首先创建webdriver访问一个电影的详情页面

  • 将打开的页面使用driver.save_screenshot()进行截图

  • 定位到要提取数据的元素

  • 获取元素的坐标点

  • 使用Pillow模块下的Image.open()方法打开上面截取的图片,再使用crop((left, top, right, bottom))方法将要提取数据的元素的图片截取出来

  • 使用Image.open("元素的图片")打开元素的图片,得到一个img对象,然后调用pytesseract.image_to_string(img)方法进行识别。得到的返回值就是识别的结果。

具体代码如下:

from PIL import Image
from selenium import webdriver
import pytesseract
import time

# 实例化driver对象
driver = webdriver.Chrome()
# 打开页面
driver.get("https://maoyan.com/films/1206875")
# 保存整个页面的截图
driver.save_screenshot("maoyan.png")

# 定位元素
element = driver.find_element_by_xpath("//span[@class='index-left info-num ']/span")

# 获取元素的 四个坐标
left = element.location['x']
top = element.location['y']
right = element.location['x'] + element.size['width']
bottom = element.location['y'] + element.size['height']

# 使用pillow模块下的image方法进行元素的截图
im = Image.open('maoyan.png')
im = im.crop((left, top, right, bottom))
im.save('span.png')

image = Image.open("span.png")

# 对文字进行识别
code = pytesseract.image_to_string(image, lang="eng", config="--psm 6")

print(code)
time.sleep(4)
driver.quit()

运行效果如下:

猫眼.gif

您阅读这篇文章共花了:  

本文标签:

版权声明:转载请带上版权原创为《星城

解压密码:若设有密码均为:www.xcooo.cn

收录状态:百度已收录点击查看详情

python爬虫遇到字体反爬如何处理

发表评论

您可以选择匿名评论,保护个人隐私 !