python模拟登录爬虫 简书_python爬虫模拟豆瓣登录

好几天过去了,终于可以更新第二篇爬虫,这次想用python爬虫模拟登陆豆瓣并爬取主页上精选内容的标题部分,确认登录成功。

前期分析

首先我们要模拟登陆豆瓣就必须先知道真实的用户登录豆瓣是个什么流程。因此我们可以打开chrome浏览器开发者工具抓包分析,豆瓣的网站登录流程以及需要post的对应的信息。这边以豆瓣为实例:

2cb083d78fed

post数据

这就是我们需要提交的信息,包括用户名和密码,以及验证码和验证码的ID,想要模拟豆瓣登录就要构造一个相同的post请求。

工具使用

这一次我们会使用resquests这个库了,因为requests直接省去了urllib和urllib2的很多麻烦,省去了很多冗余的代码,如果不熟悉可以去官网去查看。Requests

另外还需要对bs4有一定的了解,会省去不少麻烦,以及RE正则表达式,这里快捷下帮助文档。 BeautifulSoup

基本框架

# -*- coding:utf-8 -*-

import requests

from bs4 import BeautifulSoup

import urllib

import re

url = 'https://accounts.douban.com/login'

#构造post数据

data={

'redir': 'https://www.douban.com/people/138461169/',

'form_email':'xxxxxx',

'form_password':'xxxxxx',

'login':u'登录'

}

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

r = requests.post(url, data, headers=headers)

page = r.text

#利用bs4获得验证码图片地址

soup = BeautifulSoup(page,"html.parser")

captcha_url = soup.find('img',id='captcha_image')['src']

#利用正则获得验证码ID

pattern = re.compile('

captcha_id = re.findall(pattern, page)

#将验证码图片保存到本地

urllib.urlretrieve(captcha_url,"captcha.jpg")

captcha = raw_input('please input the captcha:')

data['captcha-solution'] = captcha

data['captcha-id'] = captcha_id

r = requests.post(url, data=data, headers=headers)

page = r.text

测试打开本地验证码图片,输入。

2cb083d78fed

登录成功

登录成功抓取标题

成功登录后需要爬取热门精选的标题

# -*- coding:utf-8 -*-

import requests

from bs4 import BeautifulSoup

import urllib

import re

url = 'https://accounts.douban.com/login'

data={

'redir': 'https://www.douban.com/',

'form_email':'xxxxxx',

'form_password':'xxxxxx',

'login':u'登录'

}

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

r = requests.post(url, data, headers=headers)

page = r.text

soup = BeautifulSoup(page,"html.parser")

captcha_url = soup.find('img',id='captcha_image')['src']

pattern = re.compile('

captcha_id = re.findall(pattern, page)

urllib.urlretrieve(captcha_url,"captcha.jpg")

captcha = raw_input('please input the captcha:')

data['captcha-solution'] = captcha

data['captcha-id'] = captcha_id

r = requests.post(url, data=data, headers=headers)

page = r.text

soup = BeautifulSoup(page,"html.parser")

result = soup.findAll('div',attrs={'class':'title'})

# print result

for item in result:

print item.find('a').get_text()

原网页内容:

2cb083d78fed

网页内容

下图就是抓取到的内容:

2cb083d78fed

标题内容

到这里已经完成了初步的脚本,因为实验暂时做到这。

面向对象改写代码

数据库存储

这俩块还需要完善更新...


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部