python网页数据抓取(简单记录一下的网络爬虫的知识,这里主要用到了 )
优采云 发布时间: 2021-12-03 11:23python网页数据抓取(简单记录一下的网络爬虫的知识,这里主要用到了
)
最近学习了一些python网络爬虫的知识,简单记录一下。这里主要用到requests库和BeautifulSoup库。
Requests 是一个优雅而简单的 Python HTTP 库,专为人类构建。
Beautiful Soup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据。它与您最喜欢的解析器一起工作,以提供导航、搜索和修改解析树的惯用方法。它通常可以为程序员节省数小时或数天的工作。
以上是两个库的介绍,链接是文档信息
1、示例页面
这里我用东北大学图书馆的登陆页面来实现我们的爬虫功能(ps:是的,博主是东北大学的学生..所以我有账号密码),没有账号密码也没关系, 原理是一样的 是的,我发现这个页面是因为它没有验证码,所以可以更简单,像学校页面一样更简单,更容易操作
东北大学图书馆.JPG
2、简单分析
首先,我用账号和密码登录了东北大学图书馆。我用的是Chrome浏览器,打开了开发者模式。我们来看看我们提交了哪些信息。
东北大学邮报.JPG
登录后按F12打开开发者模式。在网络选项卡下,我们找到了这个文件。他的请求方式是post,应该就是我们要找的文件。拉到最底部看Form Data,红框就是我们登录时提交的信息,一共五部分。红线是账号和密码。了解帖子信息后,我们可以编写代码自动提交信息。
登录部分澄清。接下来,我将分析要捕获的信息。现在我想捕获我的。
为了捕捉这三个数据,如上图所示,我目前借了1本书,已经借了65本书。保留请求为 0。现在的目的是捕获这些数据。我们按F12查看网页。分析我们应该抓取源代码的哪一部分。
源代码.JPG
如上图,我一步一步找到了数据所在的标签。我发现数据在标签id=history下,所以我可以先找到这个标签,然后找到tr标签,然后才能找到td标签中的数据。
3、实现的功能4、代码部分4.1、发布数据部分
先贴这部分代码
def getHTMLText(url):
try:
kv = {'user-agent': 'Mozilla/5.0'}
mydata = {'func':'login-session', 'login_source':'bor-info', 'bor_id': '***', 'bor_verification': '***','bor_library':'NEU50'}
re = requests.post(url, data=mydata, headers=kv)
re.raise_for_status()
re.encoding = re.apparent_encoding
return re.text
except:
print("异常")
return""
代码如上,我们来分析一下
4.2、 抓取数据部分
先贴上代码
def fillBookList(booklist, html):
soup = BeautifulSoup(html,"html.parser")
for tr in soup.find(id='history').descendants:
if isinstance(tr, bs4.element.Tag):
temp = tr.find_all('td')
if len(temp)>0:
booklist.append(temp[1].string.strip())
booklist.append(temp[3].string.strip())
booklist.append(temp[5].string.strip())
break
isinstance 的用法:
语法:
isinstance(对象,类信息)
其中,object是变量,classinfo是类型(tuple、dict、int、float、list、bool等)和类。如果参数 object 是 classinfo 的实例,或者 object 是 classinfo 的子类的实例,则返回 True。如果 object 不是给定类型的对象,则返回结果始终为 False。如果 classinfo 不是数据类型或由数据类型组成的元组,则会引发 TypeError 异常。
4.3、打印信息
粘贴代码
def printUnivList(booklist):
print("{:^10}\t{:^6}\t{:^10}".format("外借","借阅历史列表","预约请求"))
print("{:^10}\t{:^6}\t{:^10}".format(booklist[0],booklist[1],booklist[2])
这部分很简单,我就不讲了
4.4、主要功能
粘贴代码
def main():
html = getHTMLText("http://202.118.8.7:8991/F/-?func=bor-info")
booklist = []
fillBookList(booklist, html)
printUnivList(booklist)
5、测试
测试.jpg
我们要的信息在控制台成功打印了!
6、完整代码
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
kv = {'user-agent': 'Mozilla/5.0'}
mydata = {'func':'login-session', 'login_source':'bor-info', 'bor_id': '***', 'bor_verification': '***','bor_library':'NEU50'}
re = requests.post(url, data=mydata, headers=kv)
re.raise_for_status()
re.encoding = re.apparent_encoding
return re.text
except:
print("异常")
return""
def fillBookList(booklist, html):
soup = BeautifulSoup(html,"html.parser")
for tr in soup.find(id='history').descendants:
if isinstance(tr, bs4.element.Tag):
temp = tr.find_all('td')
if len(temp)>0:
booklist.append(temp[1].string.strip())
booklist.append(temp[3].string.strip())
booklist.append(temp[5].string.strip())
break
def printUnivList(booklist):
print("{:^10}\t{:^6}\t{:^10}".format("外借","借阅历史列表","预约请求"))
print("{:^10}\t{:^6}\t{:^10}".format(booklist[0],booklist[1],booklist[2]))
def main():
html = getHTMLText("http://202.118.8.7:8991/F/-?func=bor-info")
booklist = []
fillBookList(booklist, html)
printUnivList(booklist)
main()