美文网首页
从零起步系统入门Python爬虫工程师(二)-慕课实战

从零起步系统入门Python爬虫工程师(二)-慕课实战

作者: 文艺的程序狗 | 来源:发表于2020-03-20 15:17 被阅读0次

    csdn论坛(静态网页)

    数据库连接

    安装依赖库 pymysql

    相关操作代码github(https://github.com/PyMySQL/PyMySQL)

    connection = pymysql.connect(host='localhost',
    
                                 user='root',
    
                                 password='1234567a',
    
                                 db='spider',
    
                                 charset='utf8mb4',
    
                                 cursorclass=pymysql.cursors.DictCursor)
    

    项目使用的是peewee,ORM操作(还有djangORM sqlalchemy )github(https://github.com/coleifer/peewee)

    优势:1.隔离数据库和版本 2.便于维护 3.SQL注入

    db = MySQLDatabase("spider",host="127.0.0.1",port=3306,user="root",password="1234567a”)
    
    class BaseModel(Model):
    
        class Meta:
    
            database = db
    
    # 设置表需要注意的一些事项
    
    """
    
    char类型 要设置最大长度 默认是255
    
    对于无法确认的最大长度设置为Text
    
    设计表的时候,采集到的数据要尽量做格式化处理
    
    default和null=True
    
    """
    
    class Topic(BaseModel):
    
        title = CharField()
    
        content = TextField(default="")
    
        id = IntegerField(primary_key=True)
    
        author = CharField()
    
        create_time = DateTimeField()
    
        answer_nums = IntegerField(default=0)
    
        click_nums = IntegerField(default=0)
    
        praised_nums = IntegerField(default=0)
    
        jtl = FloatField(default=0.0) # 结帖率
    
        score = IntegerField(default=0) #赏分
    
        status = CharField() # 转态
    
        last_answer_time = DateTimeField()
    

    注意项:

    1. F12查看‘元素’找到元素用Selector 的xpath解析出来(解析出来的继续调用xpath 注意 需要加上当前路径 ”.//div“)

    2. 自动加上域名 parse.urljson(domain,url)

    3. 当ORM有id属性的时候就默认当做Primarykey(如果没有回自动生成一个id),当对数据进行更新操作的时候不能直接调用save方法,调用topic.save(force_insert=True)#有id默认是更新 此时又没有这条数据就会导致更新失败

    4. author_url.split("/")[-1] -1表示的是最后一个

    5. 字符串转时间格式datetime.strptime(time_str,”%Y-%m-%d %H:%M:%S")

    6. 解析的时候有时候会碰到返回403之类的不正常错误 是反爬的问题,需要做相应处理

    7. 把字符串转为list ast.literal_eval(node_str)

    京东项目(动态网页)

    1. 了解哪些数据时动态加载

      1. 数据加载更慢

      2. 删除js代码,然后本地显示html,看哪些数据没有显示就是动态加载的

    2. 如何获取数据

      1. 分析

        1. 在控制台的XHR(异步请求)看下有没有请求

        2. 查询js文件,js文件返回的是否有页面的字段

        3. 分析(看js源文件)构造参数,js请求

      2. selenium自动化

        1. pip install selenium
        2. 查看chrome浏览器版本(也可以是FireFox Android等等)下载对应的webDriver(http://npm.taobao.org/ 去下载)
    from selenium import webdriver
    
    brower = webdriver.Chrome(executable_path=‘/Application/PyCharm….’)
    
    sl = Selector(text=brower.page_source)
    

    登录(request)

    1. 获取session/cookies
      1. request.session()
      2. 登录返回res.cookies.get_direct()
      3. cookies写入本地
    f = open(‘douban.cookie’,’wb’)
    Pickle.dump(res.cookies,f)
    f.close()
    with open(‘douban.cookie’,’wb’) as f 就不需要调用close方法
    

    登录(selenuim)

    ps:1. 里面有iframe,selenium获取不到 ,通过 brower.switch_to.frame(xpath)
        2.brower.getCookie获取,里面信息比较多,需要过滤key value
    

    滑动验证码

    (1)鼠标移动位置上
    (2)保存按住之前的图
    (3)按住显示缺口图 保存
    (4)对比,计算出滑动距离
    (5)滑动滑块

    (1)
    from selenium.webdrive import Actionchains
    ActionChains(brower).move_to_element(slider).perform()
    (2)
    xpath定位元素 img 的location 和size确定好位置
    top,bottom,left,right = location[‘Y’],location[‘Y’]+size[‘height’],location[‘X’],location[‘X’]+size[‘width’]
    brower.maximize_window()窗口最大化
    brower.get_screen_as_png()获取全屏图片
    install pillow
    from PIL import Image
    from IO import ByteIO()
    screenshot = Image.open(BytesIO(screenshot))
    crapcha = screenshot.crop(int(left),int(top),int(right),int(bottom))
    (3) click_and_hold
    (4) 
    对比像素 rgp不一样(设置一个域值 60)
    image.load()[i,j]
    (5)
    move_by_offset() 拖动
    release 松开鼠标
    用一个函数模拟人的拖动
    

    验证码识别 服务商

    1. 云打码 ——> 比较准
    2. 超级鹰——>识别类型多

    反爬&反反爬

    • user-agent ————> install fake-useragent 随机
    • ip访问频率限制 ————>ip代理 免费(不稳定) 阿布云
    • 必须登录
    • 动态网页
    • 前端js逻辑加密和混淆
    • 机器学习分析爬虫行为
    • 只请求html,不请求css和js
    • css代码下毒(界面隐藏)
    ps:Refer 从哪个网站跳转过来
    

    scrapy(pyspider) 底层异步IO库

    • 创建scrapy项目
    • item pipline
    • MiddleWares中间件 download Spider

    相关文章

      网友评论

          本文标题:从零起步系统入门Python爬虫工程师(二)-慕课实战

          本文链接:https://www.haomeiwen.com/subject/hpujyhtx.html