图片伪装是将文字以图片的形式和正常文字混合,虽然不影响用户阅读,但是可以让爬虫拿不到当前看见的文字,具体如下图:
可以看得出来,这里的这个电话号码,是一个图片的形式,下面的程序,将绕过这种反爬虫策略
import requests
from parsel import Selector
import io
from urllib.parse import urljoin
try:
from PIL import Image
except ImportError:
import Image
import pytesseract
url = "http://www.porters.vip/confusion/recruit.html"
response = requests.get(url=url)
sel = Selector(response.text)
company = sel.css("h1.interval::text").get()
image_name = sel.css(".pn::attr('src')").extract_first()
print(image_name)
# 拼接图片名称
image_url = urljoin(url, image_name) # http://www.porters.vip/confusion/phonenumber.png
print(image_url)
# 请求图片,拿到图片字节流内容
image_body = requests.get(image_url).content
# 使用Image_open打开图片字节流,得到图片对象 BytesIO实现了在内存中读写bytes
image_stream = Image.open(io.BytesIO(image_body))
# 使用光学字符识别从图片中读取文字并打印输出结果
res = pytesseract.image_to_string(image_stream)
print(res)
# print(company)