爬虫(六)网站登录/动态数据抓取/图像识别

使用requests登录github:

import requests
from bs4 import BeautifulSoup

def main():
    # 拿到登录页面
    resp = requests.get('https://github.com/login')

    # 如果没有访问成功, 后面的代码就不需要执行了.
    if resp.status_code != 200:
        return

    # 访问成功以后, 获取网页响应返回的cookies的值, 以json(字典)格式返回.
    cookies = resp.cookies.get_dict()

    # lxml的xpath的语法 -- //div[@class=''] 查找div下面的属性为有class的的标签
    soup = BeautifulSoup(resp.text, 'lxml')

    # 在该页面的表单的隐藏域里面去获取hidden里面的值,包括token(跨站身份伪造)
    utf8_value = soup.select_one('form input[name=utf8]').attrs['value']
    authenticity_token = soup.select_one('form input[name=authenticity_token]').attrs['value']
    # 表单登录数据
    data = {
        'utf8':utf8_value,
        'authenticity_token':authenticity_token,
        'login':'[email protected]',
        'password':'123456789'
    }
    # 上传文件,找个需要提交文件的网站自己去尝试一下
    # files = {
    #     'file1':open(),
    #     'file2':open()
    # }

    # requests通过post方法提交表单
    resp = requests.post('https://github.com/session', data=data, cookies=cookies) #files=files 上传文件的时候加上这一句

    #  通过查看resp.text是否拿到了登录后的页面就可以确定是否登录成功!
    print(resp.text)

if __name__ == '__main__':
    main()

robobrowser模拟浏览器登录github:

import robobrowser

def main():
    # 获取浏览器对象, 设置解析器为lxml
    b = robobrowser.RoboBrowser(parser='lxml')

    # 通过浏览器对象去打开登录网页
    b.open('https://github.com/login')

    # 通过浏览器对象去获取具有action='/session'的表单
    f = b.get_form(action='/session')
    # 给表单name为login的text设置值
    f['login'].value = '[email protected]'
    # 给表单name为password的text设置值
    f['password'].value = '123456789'
    # 通过浏览器对象去提交表单, 将f对象传入
    b.submit_form(f)

    # print(b.find_all)  获取登录后的网页源代码

    # 遍历登录后所有的a标签
    for a in b.select('a[href]'):
        print(a.attrs['href'])


if __name__ == '__main__':
    main()

尝试用robobrowser模拟浏览器获取淘女郎动态生成图片(失败):

import robobrowser


def main():
    b = robobrowser.RoboBrowser(parser='lxml')
    b.open('https://v.taobao.com/v/content/live?catetype=704&from=taonvlang')

    # 获取所有的img_tag标签, 但是发现并没有取到动态生成的img图片
    for img_tag in b.select('img[src]'):
        print(img_tag)

if __name__ == '__main__':
    main()

selenium测试工具模拟浏览器获取淘女郎动态图片(成功):

from bs4 import BeautifulSoup
from selenium import webdriver
# 从selenium里面导入浏览器驱动器webdriver
from selenium.webdriver.common.keys import Keys


def main():
    # 浏览器驱动器去驱动谷歌浏览器, 需要下载谷歌的浏览器驱动程序, 国内不好找到下载资源, 如果有能力可以科学上网找到下载资源, 找到下载的谷歌浏览器驱动程序, 可以用下列3种方法进行让chrome()对象进行调用
    # 1. 指定路径 executable_path = 'J://chromedrive.exe'
    # 2. 将chromedrive.exe 放在系统环境变量中
    # 3. 将chromedrive.exe 所在的文件夹设为系统环境变量
    driver = webdriver.Chrome()

    # 控制浏览器去访问该网页
    driver.get('https://v.taobao.com/v/content/live?catetype=704&from=taonvlang')

    # 通过css的选择来找到元素, 然后通过输送按键可以进行输入想输入的字, 然后输入回车键, 进行搜索!
    elem = driver.find_element_by_css_selector('input[placeholder=输入关键词搜索]')
    elem.send_keys('运动')
    elem.send_keys(Keys.ENTER)

    # 使用beautifulsoup去解析网页
    soup = BeautifulSoup(driver.page_source, 'lxml')

    # 使用这种方式就可以获取到动态的内容了
    for img_tag in soup.select('img[src]'):
        print(img_tag.attrs['src'])

if __name__ == '__main__':
    main()

图像处理与图像识别

from PIL import Image, ImageFilter
from io import BytesIO
from pytesseract import image_to_string

import requests

def main():
    # 通过Image.open(x)  x为一个open对象
    img = Image.open(open('guido.jpg', 'rb'))
    # 对图像进行过滤并做高斯滤镜返回一个新的图像对象
    img2 = img.filter(ImageFilter.GaussianBlur)
    # 对img2执行保存操作, 传入一个open对象,
    img2.save(open('guido2.jpg', 'wb'))

    img = Image.open(open('aliwangwang.png', 'rb'))
    img2 = Image.open(open('aliwangwang2.png', 'rb'))
    # 拉开色差, 图像色域低于128则改为0 , 否则改为255
    img3 = img.point(lambda x: 0 if x < 128 else 255)
    img3.save(open('aliwangwang2.png', 'wb'))

    # 如果报错不在环境变量里面, 应该在系统环境变量里面加入该文件夹为环境变量, 并且重新启动pycharm即可.
    # 由于识别率有限, 所以可能会不准确
    print(image_to_string(img2))

    resp = requests.get('http://pin2.aliyun.com/get_img?type=150_40&identity=mailsso.mxhichina.com&sessionid=k0xHyBxU3K3dGXb59mP9cdeTXxL9gLHSTKhRZCryHxpOok4L')
    img4 = Image.open(BytesIO(resp.content))
    img4.save('hello.jpg')
    print(image_to_string(img4))



if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/qq_41637554/article/details/80611198
今日推荐