Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

这篇具有很好参考价值的文章主要介绍了Python爬虫-爬取百度搜索结果页的网页标题及其真实网址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

共两个依赖的需提前安装的第三方库:requests和bs4库

cmd命令行输入安装requests库:pip3 install -i https://pypi.douban.com/simple requests

安装bs4库:pip3 install -i https://pypi.douban.com/simple beautifulsoup4

 文章来源地址https://www.toymoban.com/news/detail-710434.html

本微项目源文件下载地址:

https://wwuw.lanzouj.com/i1Au51a0312d

解压文件后,需按照解压包内教程装载Cookie即可使用。 本py脚本文件较符合有需求者使用,更适合python爬虫初学者学习使用,代码注释较多,思路易理解。

 

本py脚本文件使用教程:

首先解压压缩包,打开包内的 “运行py文件前请阅读!.txt” 文件,按其步骤装载Cookie后方可使用脚本:

运行该程序前:请打开浏览器前往"https://www.baidu.com"手动登录自己的百度账户,按F12打开开发者模式,选择最上面一排Network/网络选项卡。

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

 

接着按F5刷新本网页,捕获到的请求里一直往上翻到最顶端,选择第一次请求(即名称为www.baidu.com的请求)。

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

 

再选择右侧标头选项卡,往下滑到请求标头处,将Cookie字段的值全部复制下来(有很长一段的)替换掉下行的****** 替换后可直接运行该文件。

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

 

按上述步骤装载完Cookie后记得保存py脚本文件,就可以直接F5运行该脚本了。下图这里我用的是cmd控制台环境来跑脚本。

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

 

找到保存结果的BDlinks.csv文件后,可用WPS、微软Excel等软件直接打开。

Python爬虫-爬取百度搜索结果页的网页标题及其真实网址

 

如若该py脚本首次运行就失败,运行后无数据打印出来,一般是未成功装载Cookie的问题,请按开头的步骤重新装载Cookie。

如若该py脚本多次运行后突然无数据打印出来,一般是 “高频访问百度服务器/被识别爬虫” 导致无数据返回,通常解决方法为换新Cookie:浏览器F5刷新后继续按按开头的步骤重新装载Cookie。

最后可考虑是爬虫代码失效等其他问题,发文近日该爬虫仍有效。

 

本微项目源码:

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import re
 4 import time
 5 from random import choice
 6 
 7 # 创建headers字段
 8 def createUA():
 9     # 运行该程序前:请打开浏览器前往"https://www.baidu.com"手动登录自己的百度账户,按F12打开开发者模式,选择最上面一排Network/网络选项卡
10     # 接着按F5刷新本网页,捕获到的请求里一直往上翻到最顶端,选择第一次请求(即名称为www.baidu.com的请求)。
11     # 再选择右侧标头选项卡,往下滑到请求标头处,将Cookie字段的值全部复制下来(有很长一段的)替换掉下行的****** 替换后可直接运行该文件
12     ua = {'Cookie': '******', \
13     'Host': 'www.baidu.com', \
14     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54'}
15     return ua
16     # 程序运行无数据返回爬不了的时候,浏览器直接刷新继续按上述方法换字典里的Cookie值就完事了
17 
18 # 将百度搜索链接给予的加密URL转化为真实的URL
19 def convertRealUrl(url, s2):
20     try:
21         headers = createUA()
22         realR = s2.get(url = url, headers = headers, allow_redirects = False)
23         # 当请求加密链接,初两次响应的Http报文往往告知浏览器需要重定向,最初两次的响应报文里才有Location属性来告知浏览器需要重定向到的真实网站链接。
24         # 此时我们不允许会话自动根据给出的Location重定向跳转,因为允许重定向后会自动跳到最新的真实的URL站点,这时就只返回最新站点的响应HTTP报文(已完成重定向后),此时响应标头里不再有指示重定向url的Location字段。此方法就会失效!
25         return realR.headers['Location']
26     except:
27         # print(realR.status_code, end = "")
28         print("头部字段没有Location属性或者加密的url有异常")
29         return url# 如果找不到Location头部字段无法返回真实链接,那么就返回原来的加密链接
30 
31 # 获取搜索页
32 def getSearchPage(keyword, pn, s1):
33     headers = createUA()
34     url = 'http://www.baidu.com/s'
35     payload = {'wd': keyword, 'pn': pn}
36     try:
37         r = s1.get(url, headers = headers, params = payload, timeout = 30)
38         print('状态码是:', r.status_code)
39         r.raise_for_status()
40         r.encoding = 'utf-8'
41         return r.text
42     except:
43         return "状态码异常"
44 
45 # 升级!爬取一页的标题和真实链接
46 def upgradeCrawler(html, s2):
47     soup = BeautifulSoup(html, 'lxml')
48     titles = []
49     links = []
50     for h3 in soup.find_all('h3', {'class': re.compile('c-title t')}):
51         # a.text为获取该路径下所有子孙字符串吧。可能刚好a元素和em元素间没有换行符,所以抓取的字符串里没有\n换行符
52         g_title = h3.a.text.replace('\n', '').replace(',', ' ').strip()# 去掉换行和空格,部分标题中还有逗号会影响CSV格式存储,也要去除。
53         g_url = h3.a.attrs['href']
54         g_url = convertRealUrl(g_url, s2)
55         print("{}\t{}\t".format(g_title, g_url))
56         titles.append(g_title)
57         links.append(g_url)
58     return titles, links
59 
60 # 将二维列表数据写入CSV文件
61 def writeCSV(titles, links):
62     infos = list(zip(titles, links))
63     fo = open('./BDlinks.csv', 'at', encoding='utf-8')# 需要锁定用utf-8编码打开,不然该文件很可能会以gbk中文编码存储,这导致部分url中的西文字符存储到本文件时无法通过gbk模式编码存储。
64     for row in infos:
65         fo.write(",".join(row) + "\n")
66     fo.close()
67     print("CSV文件已保存!")
68 
69 # 顶层设计
70 def main():
71     while True:  # 循环
72         keyword = input("请输入搜索关键词:")
73         num = int(input("请输入爬取页数:"))
74         titles = []
75         links = []
76         # s1会话用于获取搜索结果页
77         s1 = requests.session()
78         # s2会话用于转真实URL
79         s2 = requests.session()
80         # 第1页为0,第2页为10,第3页为20,依次类推
81         num = num * 10
82         for pn in range(0, num, 10):
83             html = getSearchPage(keyword, pn, s1)
84             print('标题\tURL\t')
85             ti, li = upgradeCrawler(html, s2)
86             titles += ti
87             links += li
88             print("{0:->41}{1:-<36.0f}".format("当前页码为:", pn / 10 + 1))
89             time.sleep(5)
90         print('爬取完成!')
91         writeCSV(titles, links)
92 
93 if __name__ == '__main__':
94     main()

有一小部分注释是作者开发学习过程中写的个人笔记,看不懂的还请跳过。

以上皆为原创内容,倘若本文对你有帮助的话还请点下下方的推荐和赞,你的鼓励就是作者创作的最大动力呀!

 

到了这里,关于Python爬虫-爬取百度搜索结果页的网页标题及其真实网址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium爬虫——以爬取澎湃新闻某搜索结果为例

    本程序致力于实现以下目标: (1)爬取澎湃新闻关于“反腐”的全部文章内容; (2)按标题、链接将其整理到excel中; (3)将标题和文章整合到一个word文档中。 许久没有正经写过了,有些生疏,代码耦合度蛮高的,所幸目标达成了。 webdriver的版本要与浏览器一致 如果用

    2024年02月06日
    浏览(46)
  • (已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题

    已解决,使用进行百度搜索,然后爬取搜索结果,请求数据后,返回的是百度安全验证,网络不给力,请稍后重试。无法请求到正确数据。且尝试在header中增加Accept参数还是不行。      在学习过程中,写了一小段练习用的爬取程序,获取百度搜索后的结果,代

    2024年02月08日
    浏览(65)
  • (已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题(2023最新)

    已解决,使用进行百度搜索,然后爬取搜索结果,请求数据后,返回的是百度安全验证,网络不给力,请稍后重试。无法请求到正确数据。且尝试在header中增加Accept参数还是不行。      在学习过程中,写了一小段练习用的爬取程序,获取百度搜索后的结果,代

    2024年02月17日
    浏览(42)
  • 【经验分享】在百度搜索引擎中的结果中,过滤指定的网站

    系统版本:Windows 10 描述:在搜索引擎中想在结果中过滤一些指定网站,快速找到有价值的内容。 视频教程: 文字教程: 1.进入百度搜索引擎,bing搜索引擎貌似不可以。 www.baidu.com 2.搜索内容如:锐捷无线AC基础命令 -csdn,“-”这个符号是减号,0旁边那个,或者小键盘的减

    2024年02月03日
    浏览(61)
  • selenium-java web自动化测试工具抓取百度搜索结果实例

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度

    2024年03月14日
    浏览(68)
  • Python获取Yandex搜索引擎搜索结果详解

    📚 个人网站:ipengtao.com 在网络搜索领域,Yandex是一个备受欢迎的搜索引擎,特别在俄罗斯和周边地区使用广泛。本文将详细介绍如何使用Python获取Yandex搜索引擎的搜索结果,以便在项目中进行搜索结果分析和数据挖掘。 使用 requests 库向Yandex搜索引擎发送HTTP请求。 确保已经

    2024年01月23日
    浏览(57)
  • 搜索引擎的个性化搜索:为何搜索结果因人而异

    💂 个人网站:【海拥】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 搜索引擎已成为我们获取信息的重要工具,而当我们输入相同的进行搜索时,为

    2024年02月11日
    浏览(53)
  • es的搜索结果处理

    elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 1.1.普通字段排序 keyword、数值、日期类型排序的语法基本一致。 语法 : 排序条件是一个数组,也就是可以

    2024年02月01日
    浏览(66)
  • Elasticsearch(八)搜索---搜索辅助功能(上)--指定搜索返回字段,结果计数和分页

    前面我们已经将ES的基础操作(索引,映射,文档)学习过了,从这一章开始,我们便开始学习ES的最大的功能—搜索 ES为用户提供了丰富的搜索功能:既有基本的搜索功能,又有搜索建议功能;既有常用的普通类型的匹配功能,又有基于地理位置的搜索功能;既提供了分页搜

    2024年02月05日
    浏览(50)
  • 织梦dedecms在搜索结果页按栏目分类显示搜索数据

    搜索结果示范 1、搜索框代码里使用name=\\\"q\\\"作为搜索框属性,例如  2、打开 /include/taglib/arclist.lib.php 找到,大概在188行 $innertext = trim($innertext); 在它下面加入 preg_match(\\\"/~([A-Za-z0-9_]+)~/s\\\", $keyword, $conditions); if(isset($_REQUEST[\\\'q\\\']) $keyword = \\\'~q~\\\') { preg_match(\\\"/~([A-Za-z0-9_]+)~/s\\\", $keyword, $cond

    2024年02月03日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包