本节通过具体的爬虫程序,演示BS4解析库的实际应用。爬虫程序目标:下载诗词名句网(https:www。shicimingju。combook)《两晋演义》小说。 关于分析网页分过程,这里不再做详细介绍了,只要通读了前面的文章,那么关于如何分析网页,此时您应该了然于胸了。其实,无论您爬取什么类型的网站,分析过程总是相似的。案例简单分析 首先判网站属于静态网站,因此您的主要任务是分析网页元素的组成,然后使用BS4提取所需的信息。如下所示: 提取到a标签是解决本程序的重点,a标签的页面代码结构如下所示:ulli自序lili第一回祀南郊司马开基立东宫庸雏伏祸lili第二回堕诡计储君纳妇慰痴情少女偷香li。。。123456复制代码类型:〔python〕 从上述代码可以看出,a标签包含了目录名称以及详情页的地址链接。那么如何获取a标签呢?经过简单分析后可知a标签属于pulli的子节点,因此可以使用BS4的select()获取。如下所示:listnamesoup。select(。bookmuluullia)1复制代码类型:〔python〕 上述代码的返回值是一个列表,列表中每一个元素都是一个Tag对象,类型为classbs4。element。Tag。 下载详情页的URL也非常容易获得,它是由发起请求的URL与a标签的herf链接拼接而成。因此通过字符串拼接就可以获取下载详内容页的URL。https:www。shicimingju。combookliangjinyanyi2。htmlhttps:www。shicimingju。combookliangjinyanyi3。html12复制代码类型:〔python〕 最后一步是提取具体的内容。通过分析详情页的元素构成可知,我们想要的内容都包含在以下标签中:具体内容123复制代码类型:〔python〕 因此使用BS4的find()方法就可以获取所需内容,如下所示:artistsoup。find(p,classchaptercontent)1复制代码类型:〔python〕 之后把获取的内容写入到txt文件中就可以了。下面我使用之前学习过的urllib模块与BS4模块编写爬虫程序,这样才能做到温故而知新。编写爬虫程序 代码如下所示,程序中已经做了详细的注释:importurllib。requestimportrandomfrombs4importBeautifulSoupimporttimedefrequesthtml(url):headers{UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome89。0。4389。90Safari537。36}requesturllib。request。Request(url,headersheaders)returnrequestdefparsehtml(html,f):生成soup对象soupBeautifulSoup(html,lxml)查找所有的章节链接和标题内容listnamesoup。select(。bookmuluullia)遍历每一个列表中的tag对象,获取链接个目录foriteminlistname:获取链接item:自序拼接目录链接,此处item类型为classbs4。element。Tag,使用下面方法可以值获取href属性值hrefhttp:www。shicimingju。comitem〔href〕获取标题titleitem。textprint(正在下载:s。。。。。。title)获取章节内容函数textgettext(href)写入文件f。write(titletext)print(结束下载:stitle)time。sleep(random。uniform(0,1))提取章节内容defgettext(href):创建请求对象requestrequesthtml(href)contenturllib。request。urlopen(request)。read()。decode(utf8)soupBeautifulSoup(content,lxml)查找包含内容的tagpartistsoup。find(p,classchaptercontent)获取tag标签中的文本内容returnartist。textdefrun():打开文件fopen(两晋演义。txt,w,encodingutf8)urlhttp:www。shicimingju。combookliangjinyanyi。html构建请求对象requestrequesthtml(url)发送请求,得到响应,转换为HTML对象htmlurllib。request。urlopen(request)。read()。decode(utf8)解析内容parsehtml(html,f)关闭文件f。close()ifnamemain:run()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152复制代码类型:〔python〕 程序运行结果:正在下载:自序。。。。。。结束下载:自序正在下载:第一回祀南郊司马开基立东宫庸雏伏祸。。。。。。结束下载:第一回祀南郊司马开基立东宫庸雏伏祸正在下载:第二回堕诡计储君纳妇慰痴情少女偷香。。。。。。。。。。 开课吧广场人才学习交流平台