欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python2.7实现模拟登陆-BeautifulSoup的步骤教程

程序员文章站 2023-03-12 14:06:18
我使用的是python2.7版本,windows下操作。所以在写代码之前肯定是要完成python的环境搭建。环境搭建网上也有很多资料,在此我不做多介绍。 1.python实现模拟...

我使用的是python2.7版本,windows下操作。所以在写代码之前肯定是要完成python的环境搭建。环境搭建网上也有很多资料,在此我不做多介绍。

1.python实现模拟登陆

loginurl = “https://192.168.1.195/index.php“

1.首先查看loginurl如何实现登陆

在登陆页按下F12,点击network的preserve log(记住一定要点,不然后面找不到自己想要找的东西),输入用户名密码,然后在登陆后的页面找到headers,

Python2.7实现模拟登陆-BeautifulSoup的步骤教程

我们可以看到Form Data即为post提交的数据。有cookie说明我们必须设置cookie处理器来保证cookie,并且访问时必须有user-agent,否则客户端会被屏蔽。

2.python模拟网页登录主要使用urllib,urllib2,cookielib,BeautifulSouup等基本模块,我们需要安装第三方模块。

pip install beautifulsoup4(如果没有安装pip先安装pip)

3.附上我的代码

#coding=utf-8
import urllib
import urllib2
import cookielib
from bs4 import BeautifulSoup
#python2.7实现模拟登陆,爬取图片
class crawl1():
    def __init__(self,opener):
        self.opener=opener
    # 保存图片到本地
    def saveImg(self, link, filename):
        content = self.opener.open(link).read()
        f = open(filename + '.jpg', 'wb')
        f.write(content)
        f.close()
filename="cookie.txt"
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
handler = urllib2.HTTPCookieProcessor(cookie)
#通过handler来构建opener
opener = urllib2.build_opener(handler)
#首页
loginurl = "https://192.168.1.195/index.php"
#登陆前准备:获取action
response = opener.open(loginurl)
soup = BeautifulSoup(response.read(), "lxml")
for input in  soup.form.find_all("input"):
    if input.get("name") == "action":
        action = input.get("value")
#post信息
values = {
        "action":action,
        "login_username":"admin",
        "login_password":"st123456",
    }
postdata = urllib.urlencode(values)
opener.addheaders = [("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36")]
#模拟登录,保存cookie到cookie.txt中
result = opener.open(loginurl, postdata)
cookie.save(ignore_discard=True, ignore_expires=True)

2.BeautifulSoup抓取html爬取图片

最开始爬取图片的时候我使用的是re.complie()正则表达式匹配来抓取html,正则表达式着实太麻烦,把我憋了好久,最后终于发现了BeautifulSoup,BeautifulSoup在抓取html上很方便。

附上我的代码,紧接1的代码:

#登陆后我们随意跳转到页面
url = "https://192.168.1.195/plugins/monitor/monitor.php"
result =opener.open(url).read()
soup2=BeautifulSoup(result,'html.parser', from_encoding='utf-8')
length=len(soup2.select(".info"))
furl='https://192.168.1.195'+soup2.select(".info")[6]["href"]
monitor1=opener.open(furl)
#提取图片的链接
soup1=BeautifulSoup(monitor1,'html.parser', from_encoding='utf-8')
monitor2=soup1.select(".graphimage")[0]["id"]
string='a'+monitor2
monitor2='https://192.168.1.195/graph.php?action=view&rra_id=all&local_graph_id='+string
monitor2= monitor2.replace("agraph_","")
 #进入图片页
finresult = opener.open(monitor2).read()
#使用soup解析
soup = BeautifulSoup(finresult, 'html.parser', from_encoding='utf-8')
link2=soup.select(".graphimage")[0]['src']
link3 = 'https://192.168.1.195/' + link2
print link3
#保存在本地的路径
local_path='D:/pycharmProject/pythonspace/test/image/'
#路径+文件名
filename=local_path+str(1)
crawl=crawl1(opener)
crawl.saveImg(link3,filename)
for i in range(2,4):
    link1 = soup.select(".graphimage")[i]['src']
    link='https://192.168.1.195/'+link1
    filename1=local_path+str(i)
    crawl.saveImg(link,filename1)
    print link

以上就是我的总结,有问题的话希望大家多提意见,谢谢