python的爬虫技术爬去糗事百科的的方法详解
初次学习爬虫技术,在知乎上看了如何爬去糗事百科的段子,于是打算自己也做一个。
实现目标:1,爬取到糗事百科的段子
2,实现每次爬去一个段子,每按一次回车爬取到下一页
技术实现:基于python的实现,利用Requests库,re库,bs4库的BeautifulSoup方法来实现的
主要内容:首先我们要理清一下爬取实现的思路,我们来构建一下主体框架。第一步我们先写一个利用Requests库来获取网页的方法,第二步我们利用bs4库的BeautifulSoup方法来分析所获取的网页信息并利用正则表达式来匹配相关的段子信息。第三步我们来打印出获得的信息。以上方法我们都通过一个主函数来进行执行。
一,首先导入相关的库
import requests from bs4 import BeautifulSoup import bs4 import re
二,首先进行网页信息的获取
def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return ""
三,把信息放到r后再进行解析
soup = BeautifulSoup(html,"html.parser")
我们需要的是段子的内容和发布人,通过网页的查看源代码我们知道段子的发布人在:
'p', attrs={'class': 'content'}中
段子的内容在
'p', attrs={'class': 'author clearfix'}中
所以我们通过bs4库的方法来提取这两个标签的具体内容
def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'})
然后通过具体到正则表达式来获取信息
for sp in a: patten = re.compile(r'<span>(.*?)</span>',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'<h2>(.*?)</h2>', re.S) d = re.findall(namePatten, str(mc)) li.append(d)
我们需要注意的是使用find_all以及re的findall方法返回的都是一个列表,使用正则表达式时我们只是粗略提取并没有把标签中的换行符去掉
接下来我们只需要把2个列表的内容进行组合输出就可以了
def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b)
然后我做一个输入控制函数,输入Q返回错误,退出,输入回车返回正确,进行下一页段子的加载
def input_enter(): input1 = input() if input1 == 'Q': return False else: return True
我们通过主函数来实现所输入的控制,如果控制函数返回的是错误就不执行输出,如果返回的是正确就继续输出。我们通过一个for循环来进行加载下一页。
def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break
这里我们需要注意到是每一次for循环都会刷新一次lis【】和li【】,这样每次都可以正确输出该网页的段子内容
一下为源代码:
import requests from bs4 import BeautifulSoup import bs4 import re def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'}) for sp in a: patten = re.compile(r'(.*?)',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'(.*?)
', re.S) d = re.findall(namePatten, str(mc)) li.append(d) except: return "" return count def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b) def input_enter(): input1 = input() if input1 == 'Q': return False else: return True def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break main()
第一次做还是有很多可以优化的地方希望大家可以指出来。
以上是python的爬虫技术爬去糗事百科的的方法详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优
