解析python网络爬虫ppt

网络爬虫是一种自动化程序,可以从网络上抓取数据并将其存储在本地或其他服务器中。网络爬虫通常用于搜索引擎、数据挖掘、市场调研等领域。在本文中,我们将分析一个网络爬虫PPT中的教学代码,并分析其中的主要功能和相关知识。

代码解析:

代码主要分为两个部分,第一部分是导入必要的库和定义常量;第二部分是爬取数据的主要过程。

导入必要的库和定义常量:

```python

# 导入必要的库

import requests

from bs4 import BeautifulSoup

import time

# 定义常量

BASE_URL = 'https://book.douban.com/top250' # 要爬取的网页URL

USER_AGENTS = ['Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',

'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',

'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36']

HEADERS = {'User-Agent': ""}

```

这一部分代码主要实现了导入requests、BeautifulSoup和time等必要的库,并定义了常量。其中`BASE_URL`为要爬取的网页URL,`USER_AGENTS`是浏览器代理,模拟不同的浏览器访问网页,伪装爬虫行为,防止被封禁。`HEADERS`是requests请求头,用于发送给服务器的额外信息,这里是设置`User-Agent`。在爬取网页时,我们经常需要设定请求头以避免被服务器屏蔽,因为服务器可能会对数量较多的请求进行限制。

爬取数据的主要过程:

```python

def getHTMLText(url, headers):

try:

HEADERS['User-Agent'] = USER_AGENTS[2] # 设置请求头

r = requests.get(url, headers=headers) # 发送请求

r.raise_for_status() # 判断请求是否成功,抛出异常

r.encoding = r.apparent_encoding # 设置网页编码

return r.text # 返回网页HTML内容

except:

return "Error" # 请求错误时返回“Error”

def parsePage(html):

soup = BeautifulSoup(html, "html.parser") # 解析网页HTML内容

book_list = soup.find('div', attrs={'class': 'article'}).find_all('table') # 获取书籍列表

result_list = [] # 创建空列表,用于储存书籍信息

for book in book_list:

book_dict = {} # 创建空字典,用于储存单本书籍信息

try:

book_dict['title'] = book.find('div', attrs={'class': 'pl2'}).find('a')['title'] # 获取书籍标题

book_dict['Author'] = book.find('p', attrs={'class': 'pl'}).get_text() # 获取作者名字和出版信息

book_dict['rating_num'] = book.find('span', attrs={'class': 'rating_nums'}).get_text() # 获取书籍评分

book_dict['comment_num'] = book.find('span', attrs={'class': 'pl'}).get_text() # 获取书籍评论数

result_list.append(book_dict) # 添加单本书籍信息到列表中

except:

continue # 当解析出错时跳过该书籍

return result_list # 返回所有书籍信息列表

if __name__ == "__main__":

# 获取网页HTML内容并解析

html = getHTMLText(BASE_URL, HEADERS)

result = parsePage(html)

for index, item in enumerate(result):

print(index+1, item)

time.sleep(1) # 暂停1秒

```

这一部分代码主要实现了爬取数据的主要过程。首先,我们定义了一个`getHTMLText()`函数,用于获取网页HTML内容,为后面的分析做铺垫。

该函数使用了requests库,通过get()方法进行HTTP请求访问。如果请求成功,我们将网页编码设定为response的apparent_encoding,这里的apparent_encoding是用来判断网页编码使用的。最后将获取到的HTML内容返回。

需要注意的是,在函数中也定义了requests的请求头User-Agent,用于避免被服务器屏蔽。具体使用方法参见代码中注释。

接下来,我们定义了一个`parsePage()`函数,用于解析HTML内容,并将关键信息存储到一个列表中。

该函数首先创建了一个BeautifulSoup对象,用于解析HTML代码。然后,通过find()方法获取书籍列表,并利用字典的形式将书籍信息存储到一个空列表中。在获取每本书籍信息时,我们使用了try-except来捕捉异常,以避免解析出错的情况。为了方便后续操作,我们将获取到的所有书籍信息存储到一个列表中,并返回该列表。

最后,我们在主函数中调用getHTMLText()函数获取HTML内容,并将HTML内容传递给parsePage()函数解析,并将解析结果打印出来。在打印每一本书籍信息的同时,我们使用了time模块的sleep()函数来暂停一秒,以防止请求速度过快导致服务器屏蔽。

相关知识:

在网络爬虫中,我们需要注意以下几点:

1. robots.txt协议:robots.txt是用来告诉爬虫哪些页面可以被爬取,哪些不行的文本文件。在使用爬虫时,我们需要遵守robots协议,禁止通过爬虫非法抓取网站数据。

2. User Agent:User Agent是HTTP请求头的重要组成部分,用于向服务器表明客户端的类型和版本信息。在编写爬虫时,我们可以根据请求头中的User Agent来模拟不同的浏览器访问网页,来达到伪装爬虫行为的目的。

3. IP封禁:为了保护网站的数据安全,服务器管理员可能会对IP地址进行封禁,防止过多的请求访问网站。为避免被服务器屏蔽,我们需要设置请求间隔、User Agent以及使用代理IP等技巧。

4. 解析HTML:在爬取网页数据时,我们常常需要将HTML代码进行解析,并获取其中的关键信息。为此,我们可以使用多种Python库,如BeautifulSoup、lxml等,它们可以帮助我们快速地分析和提取HTML某个元素的信息。

总之,网络爬虫是一个庞大而多样化的领域,对于初学者来说,需要具备一定的编程基础和相关知识,在实践过程中不断地探索和学习。当然,在爬虫过程中也需要注意自身的行为,遵循商业道德和法律法规。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(114) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部