分享一个使用Python网络爬虫抓取百度关键词和链接的代码(正则表达式篇)
优采云 发布时间: 2022-07-07 11:01分享一个使用Python网络爬虫抓取百度关键词和链接的代码(正则表达式篇)
点击上方“Python共享之家”,进行关注
回复“资源”即可获赠Python学习资料
今
日
鸡
汤
月下飞天镜,云生结海楼。
大家好,我是皮皮。
一、前言
前几天在Python白银交流群有个叫【꯭】的粉丝分享了一份Python网络爬虫代码,用来获取某度关键词和链接的。其实这个需求之前我也写过代码,不过网页结构变化之后,之前的提取器已经失效了,所以代码就作废了。
今天这里给大家分享一个使用正则表达式的提取方式获取标题和链接。
二、实现过程
直接上代码了,如下所示:
# -*- coding: utf-8 -*-<br /># @Time : 2022/4/19 0019 18:24<br /># @Author : 皮皮:Python共享之家<br /># @File : demo.py<br /><br />import requests<br />from fake_useragent import UserAgent<br />import re<br /><br /><br />def get_web_page(wd, pn):<br /> url = 'https://www.baidu.com/s'<br /> ua = UserAgent()<br /> # print(ua)<br /> headers = {<br /> 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',<br /> 'User-agent': ua.random,<br /> 'Cookie': 'BAIDUID=C58*敏*感*词*A69E08EF11BEA25E73D71F452FB:FG=1; PSTM=1564970099; BIDUPSID=87DDAF2BDABDA37DCF227077F0A4ADAA; __yjs_duid=1_351e08bd1199f6367d690719fdd523a71622540815502; MAWEBCUID=web_goISnQHdIuXmTRjWmrvZPZVKYQvVAxETmIIzcYfXMnXsObtoEz; MCITY=-%3A; BD_UPN=12314353; BDUSS_BFESS=003VTlGWFZGV0NYZU1FdFBTZnFYMGtPcUs2VUtRSERVTWRNcFM5cmtHaGoyb1ZpRUFBQUFBJCQAAAAAAAAAAAEAAABCyphcYWRkZDgyMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNNXmJjTV5iT; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=34813_35915_36166_34584_36120_36195_36075_36125_36226_26350_36300_22160_36061; ab_sr=1.0.1_ODllMjlmYmJlNjY5NzBjYTRkN2VlMDU3ZGI5ODJhNzA4YzllOTM3OTAwMWNmZTFlMTQ3ZmY3MmRlNDYyYWZjNTI5MzcwYmE3MDk0NGNkOGFmYThkN2FlMDdlMzA0ZjY0MmViNWIzNjc0ZjhmZWZmZGJmMTA3MGI5ZGM5MDM4NmQ3MWI0ZDUyMDljZWU4ZDExZjA1ZTg5MDYyYmNiND*敏*感*词*ODFkOTQ2MmYxN2EwYTgwOTFlYTRlZjYzMmYwNzQ0ZDI3; BAIDUID_BFESS=C58*敏*感*词*A69E08EF11BEA25E73D71F452FB:FG=1; delPer=0; BD_CK_SAM=1; PSINO=1; H_PS_645EC=c87aPHArHVd30qt4cjwBEzjR%2BwqcUnQjjApbQetZm98YZVXUtN%2FOXOxNv3A; BA_HECTOR=25a0850k0l8h002kio1h5v7ud0q; baikeVisitId=61a414fd-dde7-41c2-9aa5-aa8044420d33',<br /> 'Host': 'www.baidu.com'<br /> }<br /> params = {<br /> 'wd': wd,<br /> 'pn': pn<br /> }<br /> response = requests.get(url, headers=headers, params=params)<br /> response.encoding = 'utf-8'<br /> # print(response.text)<br /> response = response.text<br /> return response<br /><br /><br />def parse_page(response):<br /> ex = '"title":"(?P.*?)".*?"titleUrl":"(?P.*?)"'<br /> titles = re.findall(ex, response)<br /> data = []<br /> nub = 0<br /> for title in titles:<br /> title = ",".join(title)<br /> title = title.replace('', '')<br /> title = title.replace('', '')<br /> if title.startswith('\\u00'):<br /> continue<br /> nub += 1<br /> data.append(title)<br /> print(title)<br /> print(f"当前页一共有{nub}条标题和网址的信息!")<br /> return data<br /><br /><br />def save_data(datas, kw, page):<br /> for data in datas:<br /> with open(f'./百度{kw}的第{page}页的数据.csv', 'a', encoding='utf-8') as fp:<br /> fp.write(data + '\n')<br /> print(f"百度{kw}的第{page}页的数据已经成功保存!")<br /><br /><br />def main():<br /> kw = input("请输入要查询的关键词:").strip()<br /> page = input("请输入要查询的页码:").strip()<br /> page_pn = int(page)<br /> page_pn = str(page_pn * 10 - 10)<br /> resp = get_web_page(kw, page_pn)<br /> datas = parse_page(resp)<br /> save_data(datas, kw, page)<br /><br /><br />if __name__ == '__main__':<br /> main()<br />
这个代码亲测好使,运行之后结果如下。
在本地也会自动地生成csv存储文件,内容如下:
三、总结
大家好,我是皮皮。这篇文章主要分享了一个使用Python网络爬虫抓取百度关键词和链接的代码。文中只是使用了正则表达式来做提取,你也可以尝试使用xpath和bs4等提取器来实现。下一篇文章,将给大家分享使用bs4来提取百度关键词和链接,也欢迎大家积极尝试,一起学习。
最后感谢粉丝【꯭】分享,感谢【dcpeng】、【月神】在运行过程中给出的代码建议,感谢粉丝【冯诚】、【艾希·觉罗】等人参与学习交流。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
-------------------End-------------------