python网页数据抓取(简单记录一下的网络爬虫的知识,这里主要用到了 )

优采云 发布时间: 2021-12-03 11:23

  python网页数据抓取(简单记录一下的网络爬虫的知识,这里主要用到了

)

  最近学习了一些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()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线