基于Python的百度贴吧资源获取的设计和实现

2022-09-11

一、引言

如今网络上遍布着各种各样的信息, 但是用户所感兴趣的信息只占少部分, 这时就需要使用爬虫技术, 把用户所感兴趣的信息从大量的数据中提取并保存下来。针对爬虫技术的研究、应用有很多, 李保国使用爬虫技术动态的新闻的评论进行爬取[1], 陈琳[2]、赵丽娜[3]等人通过模拟登陆分别对微博用户正文和图书借阅信息进行爬取, 潘巧智等人[4]针对在大数据的环境下设计的爬虫程序。但是本文所研究的仅仅爬取下来链接和验证码是不够的, 还要分别打开进行下载, 如果手工操作会浪费时间, 所以与Selenium2相结合[5]来进行下载。本文在之前研究的基础上, 使用Python语言设计程序, 模拟自动登陆, 对帖子评论中的百度云链接和验证码进行爬取, 然后自动打开链接, 将链接内的文件下载保存。

二、相关介绍

爬虫技术简单说就是自动获取网页上信息的技术, 首先对目标网页发出请求, 得到响应的内容后, 根据需求对响应的内容进行解析, 进而得到目标信息。但是有的信息只有登录后才能获取到, 所以就需要进行模拟登陆。模拟登陆一般采取的是添加cookie的方式来进行, cookie中保存的是用户的登录信息, 首先手动登陆一次, 将得到的cookie信息添加到程序中, 再运行程序就可以直接登陆成功。

使用Selenium2也可实现自动登陆, 通过定位控件, 将用户名和密码写入程序, 直接填入相应的位置, 点击登陆然后登陆成功。Selenium2是一个用于Web应用程序测试的工具, 可以使用常用的语言实现自动化, 其中webdriver使用浏览器原始的API, 直接对浏览器页面里的元素进行操作。但是对不同的浏览器处理方式有所不同, 常用的有FirefoxDriver和ChromeDriver, 本文使用的是chrome浏览器, 使用的也就是ChromeDriver来对信息进行爬取。

三、详细设计

(一) 模拟登陆百度

因为要爬取贴吧帖子内容, 有些信息必须登陆后才能获取到, 所以在爬虫开始前得先进行模拟登陆, 模拟登陆采取的是Python+Selenium2, url传入的为百度的网址, driver调用get方法, 打开给定url, 使用time.sleep (2) 实现等待, 保证页面加载完整, 然后使用driver.find_element_by_id () 进行定位, 通过定位模拟点击右上角的登陆, 在显示的登陆方法模拟选择用户名密码登陆, 将用户的用户名和密码分别模拟填入, 点击登陆即可成功登陆, 注意在页面跳转的时候设置时间进行等待以便页面加载完成。

(二) 爬取贴吧帖子内的百度云链接与提取码

登陆以后, 手动打开目标帖子, 此时按下f12, 再刷新网页, 点击network下的XHR, 可以看到有一个名为totalcomment的对象, 然后看该对象的comment_url, 这个comment_url就是之后提取信息所要用的, 而且每一页的相应的评论的comment_url都是有规律的, 通过程序就可以将所有页面帖子的评论信息都爬取下来。Urllib.request是一个打开url的可拓展的类库, 库中的urlopen (url) 获取了url的页面, 请求每一页的comment_url之后获取到响应的内容, 此时格式为bytes类型, 使用read () 方法对响应的数据读取, 并使用json.loads () 对数据进行解码, 将其转换为json格式s, 根据需求对json格式的数据进行评论提取s[‘data’][‘comment_list’], 再对json数据进行分析, 得到具体的每一条评论, 利用正则表达式匹配出评论中的百度云链接和提取码, 但可能存在只有链接没有提取码的情况, 为了对应提取码则为‘’, 直到帖子内的所有目标内容都被爬取下来,

(三) 将百度云链接内的内容下载到指定路径

爬取百度云链接内的文件采取广度优先的策略, 就是先把所有的链接和提取码都爬取下来之后, 再按顺序将文件爬取下来。上一步将帖子里的百度云链接和提取码分别放在两个List中, 下载使用Python+Selenium2实现自动下载, 模拟登陆百度云, 通过循环, 首先模拟请求一个链接, 进行定位然后模拟填写、点击进行下载, 这里可能会有两种情况, 一种是有提取码的, 一种是没有提取码的, 所以下载是的方法中有两部分, 通过判断链接对应的提取码是否为‘’来选择之后的操作。打开后要注意等待一定时间再进行下载, 下载完成后再继续下载下一个文件, 直到所有的文件都被下载下来, 再将chrome浏览器关闭。

四、总结

使用本文设计的程序, 可以快速的将贴吧帖子中的百度云资源下载下来, 在满足需求的同时, 提高了效率, 而且程序不仅仅在本文场景中适用, 也可适用于其他应用。

摘要:随着信息技术的发展, 人们在网络上的交流变得十分的频繁, 很多用户选择在特定的贴吧分享自己的信息资源, 其他用户如果感兴趣则会去查看并下载, 但是每个帖子里的资源可能有很多, 单个去下载会十分的繁琐, 本文使用Python设计的程序, 通过模拟登陆, 把目标帖子中的百度云链接以及提取码爬取下来, 之后利用Selenium2自动的把每个链接内的文件下载到指定目录中, 实现快速下载, 减少重复操作, 提高效率。

关键词:百度,Python,Selenium2

参考文献

[1] 李保国.基于聚类与LDA的新闻评论主题挖掘研究[D].武汉:武汉纺织大学, 2016.

[2] 陈琳, 任芳.基于Python的新浪微博数据爬虫程序设计[J].信息系统工程, 2016 (9) :97-99.

[3] 赵丽娜, 李伟, 康犇, 张凯.基于Python爬虫的借阅数据获取[J].北华航天工业学院学报, 2018, 28 (4) :61-62.

[4] 潘巧智, 张磊.浅谈大数据环境下基于Python的网络爬虫技术[J].网络安全技术与应用, 2018 (5) :65.

[5] 李瑞, 徐家喜.基于selenium2的自动化测试系统的设计和实现[J].福建电脑, 2018 (7) :30.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:培美曲塞联合奥沙利铂用于非小细胞肺癌的疗效分析下一篇:浅谈测井技术的发展方向和趋势