python3 --- 基于requests + beautifulsoup 实现爬虫项目

python3 — 基于requests + beautifulsoup 实现网页信息的抓取

前面我已经在博客中已经讲解了 requests 、 beautifulsoup 库的具体使用方法。

如果还不懂可以去我的博客园瞧一瞧,下面就是两个库的超链接,可点开学习!

requests 讲解链接

beautifulsoup 讲解

接下来我们就一起来实战练习下

一、项目简述:

1.内容:抓取广东工业大学华立学院图书馆官网的新书推荐,保存所有新书的书名。

2.目标网站:http://library.hualixy.com/index.php?g=portal&m=list&a=index&id=79

3.编程软件:pycharm(社区、专业版均可)

4.使用 python 3.7版本

5.涉及的 python库名称:requests 、 beautifulsoup

二、具体方法:

1.导入库

import  requests
from bs4 import BeautifulSoup

2.简单分析目标网站,获得请求头,防止爬虫被网页隔断。
在这里插入图片描述
3.找到了请求头,就可以用requests.get ( ) 方法后可以伪装浏览器登陆啦。

#循环访问所有页数 number
def get_html(number):
    #伪装浏览器访问
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    
    url = 'http://library.hualixy.com/index.php?g=Portal&m=List&a=index&id=79&p='+str(number)
    response = requests.get(url,headers = headers)
    response.encoding = 'utf-8'
    return response.text   #返回html文档

4.接下来我们可以先查看我们需要抓取的书名的html代码是什么样子的格式,便于我们使用beautifulsoup来匹配抓取:

在这里插入图片描述

#解析网页
def html_parse():

    soup = BeautifulSoup(get_html(number), 'lxml')  
    result = soup.select('a [class="title"]')  #匹配所要抓取的内容 
    
    urllist = []  #定义一个列表存放抓取的内容
    n = 0  #初始化页数编号,指定从1开始
    for i in result:
        results = (str(n) + "   " + '《' + i.text +'》')
        urllist.append(results)   # 将抓取的内容循环追加进去列表
        urllist.append('\n')
        n = n + 1
        
    f.writelines(urllist)  #保存数据

5.最后一步将抓取到的文件保存并重命名

#保存文件
filename = '广东工业大学华立学院图书馆新书推荐.txt'
f = open(filename, 'w', encoding='utf-8')
#循环抓取网页
for number in range(1,3):
    get_html(number)
    html_parse()
    print("第"+str(number)+"页保存成功")

f.close()
print("文件保存成功")

6.本次爬虫的最终代码如下:

import  requests
from bs4 import BeautifulSoup

#发送请求,获得网页响应
def get_html(number):
    #伪装浏览器访问
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    url = 'http://library.hualixy.com/index.php?g=Portal&m=List&a=index&id=79&p='+str(number)
    response = requests.get(url,headers = headers)
    response.encoding = 'utf-8'
    return response.text   #返回html文档

#解析网页
def html_parse():
    soup = BeautifulSoup(get_html(number), 'lxml')
    result = soup.select('a [class="title"]')  #匹配所要抓取的内容
    urllist = []  #定义一个列表存放抓取的内容
    n = 1  #初始化页数编号,指定从1开始
    for i in result:
        results = (str(n) + "   " + '《' + i.text +'》')
        urllist.append(results) #追加进去列表
        urllist.append('\n')
        n = n + 1
    f.writelines(urllist)  #保存数据

if __name__ == "__main__":
    #保存文件
    filename = '广东工业大学华立学院图书馆新书推荐.txt'
    f = open(filename, 'w', encoding='utf-8')
    #循环抓取网页
    for number in range(1,42):
        get_html(number)
        html_parse()
        print("第"+str(number)+"页保存成功")

    f.close()
    print("文件保存成功")

运行结果如下图:
在这里插入图片描述
在这里插入图片描述

今天项目讲解就到这里,下期博客见

发布了22 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43930694/article/details/90291466