美文网首页
python登录豆瓣并爬取文章

python登录豆瓣并爬取文章

作者: JFang | 来源:发表于2017-12-23 16:04 被阅读0次

    1.首先使用get请求获取登录时候需要用验证码
    2.保存验证码到本地,并且手工输入验证码
    3.使用Chrome浏览器打开开发模式,切换到netword下获取请求模拟登录获取请求需要的参数
    4.登录成功开始爬取文章
    注:改demo只是用来练手并记录一下,所以健壮性没有处理好

    import requests
    from lxml import etree
    from PIL import Image
    
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
    }
    
    #登录之后获取文章的内容
    def get_article_data(input_code,image_id):
        form_data = {
            'source': None,
            'redir': 'https://www.douban.com',
            'form_email': '12345@qq.com',             #输入你对应的账号
            'form_password': '111111',        #替换密码
            'captcha-solution': input_code,
            'captcha-id': image_id,
            'login': '%E7%99%BB%E5%BD%95'
        }
        s = requests.session()
        #模拟登录操作
        login_data = s.post('https://accounts.douban.com/login', headers=header, data=form_data)
        login_selecotor = etree.HTML(login_data.content)
        article_list = login_selecotor.xpath('//div[@data-uid = "900117594"]')
        for article in range(len((article_list))):
            print login_selecotor.xpath("//div[@class='title']/a/text()")[article].encode('utf-8')
    
    #保存并显示图片
    def save_and_show_code(url):
        # 获取图片
        image_content = requests.get(url, headers=header)
        # 保存图片到本地
        with open('code.jpg', 'wb') as fp:
            fp.write(image_content.content)
        # 使用PIL打开图片
        img = Image.open('code.jpg')
        img.show()
    
    
    def mian():
        # 用get请求登录的页面,获取图片验证码
        login_html = requests.get("https://accounts.douban.com/login", headers=header)
        # print login_html.content
        selector = etree.HTML(login_html.text)
        # 获取图片验证码的网络路径
        image_code = selector.xpath('//*[@id="captcha_image"]/@src')[0]
        # 获取图片对应的id
        image_id = image_code.split('=')[1].split('&')[0]
        #显示验证码
        save_and_show_code(image_code)
        #获取手工填入的验证码
        input_code = None
        input_code = raw_input(u'请输入图形验证码')
        #获取登录后的文章数据
        get_article_data(input_code,image_id)
    
    if __name__ == '__main__':
        mian()
    

    相关文章

      网友评论

          本文标题:python登录豆瓣并爬取文章

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