python爬虫基础教程

python爬虫基础教程(爬取小说内容示例演示)

1、python基础

1.1、python简介

Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

1.2、python基础语法

学习请看菜鸟教程W3school教程,python入门很简单。

2、爬虫简介

2.1、爬虫介绍

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

2.2、产生背景

随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:

(1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通过搜索引擎所返回的结果包含大量用户不关心的网页。

(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。

(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。

(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。

在这里插入图片描述网络爬虫

为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。

1 聚焦爬虫工作原理以及关键技术概述

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

在这里插入图片描述

相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:

(1) 对抓取目标的描述或定义;

(2) 对网页或数据的分析与过滤;

(3) 对URL搜索策略

3、爬虫示例

3.1、爬取小说的爬虫

requests, 第三方库中的模块,http,了解请进入传送门 https://requests.readthedocs.io/zh_CN/latest/

re 正则表达式模块 主要功能是通过正则表达式是用来匹配处理字符串的, 了解传送门,https://www.cnblogs.com/bainianminguo/p/10657631.html

废话不多说,直接上代码:

'''
python爬虫爬取小说网站的小说内容
'''

'''requests, 第三方库中的模块,http,了解请进入传送门https://requests.readthedocs.io/zh_CN/latest/'''

'''re 正则表达式模块 主要功能是通过正则表达式是用来匹配处理字符串的, 了解传送门 https://www.cnblogs.com/bainianminguo/p/10657631.html'''

#导入request

import requests
import re

# 链接头部信息,方便拼接
header = "https://www.bqg44.net"
# 链接
urlList = 'https://www.bqg44.net/book/170548/'
#模拟浏览器发送http请求
response = requests.get(urlList)
#编码方式
response.encoding = 'utf-8'
#目标小说主页的网页源代码
html = response.text  # response.text返回的是Unicode格式,通常需要转换为utf-8格式,否则就是乱码。
print(html)
#获取小说的名字
title = re.findall(r'<strong>《(.*?)》最新章节</strong>', html)[0]
print(title)

# #新建一个文件,保存小说内容, 名字为该小说的title
fb = open('%s.txt' %title, 'w', encoding='utf-8')

# html = re.findall(r'<div class="info-chapters flex flex-wrap">(.*?)<div></div><div class="container">', html)[0]
print("===============")
# print(html1)
print("===============")

urlListTemp = re.findall(r'<a href="(.*?)" title="', html)
urlList = []

# temp = urlListTemp[0]
# print(temp)
# print(len(temp))
# temp = urlListTemp[21]  # 从目录获取到的链接
# print(temp)
# print(len(temp))
# response1 = requests.get(header+temp)
# response1.encoding = "utf-8"
# text_html = response1.text
# print(text_html)
# text = re.findall(r'<article id="article" class="content">(.*?)</p></article>', text_html)[0]
# # print(text)

'''遍历所有的链接,进行数据处理并将处理后的数据存储到本地TXT文件中'''
for j in range(0, len(urlListTemp)):
    if len(urlListTemp[j]) >= 22:  # 排除前面及后面目录不相干的部分
        '''筛选链接,并下载'''
        urlTemp = header+urlListTemp[j]  # 拼接链接
        urlList.append(urlTemp)
        print(urlTemp)
        response1 = requests.get(urlTemp)  # 访问链接
        response1.encoding = "utf-8"
        text_html = response1.text  # 获取该链接html源代码
        # print(text_html)

        '''数据清洗'''
        text = re.findall(r'<article id="article" class="content">(.*?)</p></article>', text_html)[0]
        # replace()方法进行字符串的替换, str.repalce(a, b)即将所有a替换为b
        chapter_content = text.replace(' ', '')
        chapter_content = chapter_content.replace('<br>', '')
        chapter_content = chapter_content.replace('<br/>', '')
        chapter_content = chapter_content.replace('&nbsp;', '')

        chapter_content = chapter_content.replace('<p>', '')
        chapter_content = chapter_content.replace('</p>', '')
        chapter_content = chapter_content.replace('“”', '')
        print(chapter_content)

        '''分段'''
        strTemp = ''
        count = 0
        for j in chapter_content:
            if count >= 50:  # 当字串串长度大于50时,添加一个换行符
                count = 0
                strTemp += "\n"
            strTemp += str(j)
            count += 1
        strTemp += '\n'
        chapter_content = strTemp


        '''写入文件中'''
        fb.write(chapter_content)
        fb.write("\r\n")
        fb.write("====================")
        fb.write("\r\n")

通过这个例子,你可以简单的看到通过爬虫爬取小说文章内容的效果。当然如果你还想多学学,可以看看下面的拓展学习。

4、拓展学习

4.1、爬虫框架

常用爬虫框架表,该表取自https://blog.csdn.net/gongbing798930123/article/details/79028549

JAVAPYTHONPHPC#C/C++
Apache Nutch2scrapyphpspiderDotnetSpideropen-source-search-engine
webmagicCrawleyBeanbunNWebCrawlerCobweb
HeritrixPortiaPHPCrawlSmartSpiderupton
WebCollectorPySpiderphp seleniumAbotwombat
crawler4jgrabxNetSpidr
SpidermancolaAngleSharpLarbin
SeimiCrawlerpython seleniumHtmlAgilityPack
jsoupCSQuery
java selenium
htmlunit

有兴趣的可以自己研究一下,相关爬虫框架都是值得参考学习的。python语言主推Scrapy框架。

JAVAPYTHONPHPC#C/C++
Apache Nutch2scrapyphpspiderDotnetSpideropen-source-search-engine
webmagicCrawleyBeanbunNWebCrawlerCobweb
HeritrixPortiaPHPCrawlSmartSpiderupton
WebCollectorPySpiderphp seleniumAbotwombat
crawler4jgrabxNetSpidr
SpidermancolaAngleSharpLarbin
SeimiCrawlerpython seleniumHtmlAgilityPack
jsoupCSQuery
java selenium
htmlunit

有兴趣的可以自己研究一下,相关爬虫框架都是值得参考学习的。python语言主推Scrapy框架。

本博文后期仍会更新,尽请期待。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小枫学IT

如果觉得有用的话,可以支持一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值