网页爬取主要的是对网页内容进行分析,这是进行数据爬取的先决条件,因此博客主要对爬取思路进行下解析,自学的小伙伴们可以一起来学习,有什么不足也可以指出,都是在自学Ing,回归正题今天我们要来爬取百度搜索相关的网页。
首先我们打开度娘,进行搜索
首页网址为:https://www.baidu.com/s?wd=%E6%95%B0%E6%8D%AE&rsv_spt=1&rsv_iqid=0x93e76171000312b4&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=7&rsv_sug1=6&rsv_sug7=101&rsv_sug2=0&rsv_btype=i&inputT=778&rsv_sug4=1116

接着我们点击第二页可以看到网址变更为:https://www.baidu.com/s?wd=数据&pn=10&oq=%E6%95%B0%E6%8D%AE&tn=baiduhome_pg&ie=utf-8&usm=2&rsv_idx=2&rsv_pq=f30ff13f00000cf7&rsv_t=4810mKq3P%2BTmHDnRmpF1eE9P0PvsFC5IpcU%2BHHNq51IATNTDhmKSM1%2Bbr%2BiWFPGYJALE

可以看出搜索栏的数据由wd=数据控制,接着进行第三页、四页、五页点击可以看到pn从第二页的10变成20、30、40,我们可以进行验证:

删掉多余的后缀变为https://www.baidu.com/s?wd=数据&pn=0,可以看到输入wd=数据&pn=0时候为第一页,可以多试一些数,发现只要小于10的数,即为首页
因此可以得出 页数=页数*10-10为搜索对应页码的pn码
可以写出相应代码获取不同页面:

def get_url(wd,num):s = requests.session()#第1页为小于10的数字 10为第2页,20为第三页,30为第四页,以此类推num=num*10-10for i in range(-10, num, 10):url = 'https://www.baidu.com/s'# 点击界面第二页可以看到网页变化截取关键部分 https://www.baidu.com/s?wd=python&pn=10 params = {"wd": wd,"pn": i,}r = s.get(url=url, headers=headers, params=params)print("返回状态码:",r.status_code) #可以看对应Js 正常网页访问时候 status状态码 为200time.sleep(1 + (i / 10))print("当前页码:",(i+10)/10+1)
if __name__ == '__main__':while True:#循环headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0","Host": "www.baidu.com",}#后续调用wd = input("输入搜索内容:")num =int(input("输入页数:"))get_url(wd,num)

我们再看网页数据传输
可以看出并没有页面的数据只有搜索栏历史数据的,数据为接口调用。
因此我们考虑从网页元素入手,考虑直接扒拉数据:

从大方向入手,整个搜索栏下页面布局为:


页面的标题数据和Url数据在div id=content_left下方,接着继续用左上角select工具
查看对应标题的网页元素位置

可以看到 class 为t的类名中 a 元素也就是标签可定义锚
(1、通过使用 href 属性,创建指度向另外一个问文档的链接(或超链接)
2、通过使用 name 或 id 属性,创建一个文档内部的书签(也就是说,可以创建指向文档片段的链接))
中的href为对应搜索网页跳转链接。
但这时候我们会发现比较棘手的事情,对应的搜索标题被分割成搜索关键字(em为网页强调元素)等部分,所以这时候考虑获取当前类下的文本属性即可。
因此可以从对应分析中编写代码:

 soup = BeautifulSoup(r.text, 'lxml')for so in soup.select('#content_left .t a'):g_url = so.get('href')g_title=so.get_text().replace('\n','').strip()#根据分析标题无对应标签 只能获取标签内文字 去掉换行和空格

但我们从element分析中得知百度网页获取的url一般为他自己加密的url,因此我们需要进行真实Url获取

#从element里面进行分析,可以知道百度会给一个自己加密的Url
def convert_url(url):resp = requests.get(url=url,headers=headers,allow_redirects=False)return resp.headers['Location']
#
#获取url

对应搜索网页页码跳转、数据的获取,真实Url转换3个步骤思路的整合,面向过程的思考模式过后:

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd#从element里面进行分析,可以知道百度会给一个自己加密的Url
def convert_url(url):resp = requests.get(url=url,headers=headers,allow_redirects=False, verify=False)return resp.headers['Location']
#
#获取urldef get_url(wd,num):s = requests.session()total_title=[]total_url=[]total_info=[]#第1页为小于10的数字 10为第2页,20为第三页,30为第四页,以此类推num=num*10-10for i in range(-10, num, 10):url = 'https://www.baidu.com/s'# 点击界面第二页可以看到网页变化截取关键部分 https://www.baidu.com/s?wd=python&pn=10 params = {"wd": wd,"pn": i,}r = s.get(url=url, headers=headers, params=params,verify=False)print("返回状态码:",r.status_code) #可以看对应Js 正常网页访问时候 status状态码 为200soup = BeautifulSoup(r.text, 'lxml')for so in soup.select('#content_left .t a'):g_url = convert_url(so.get('href'))#对界面获取的url进行进行访问获取真实Urlg_title=so.get_text().replace('\n','').strip()#根据分析标题无对应标签 只能获取标签内文字 去掉换行和空格print(g_title,g_url)total_title +=[g_title]total_url +=[g_url]time.sleep(1 + (i / 10))print("当前页码:",(i+10)/10+1)try:total_info=zip(total_title,total_url)df=pd.DataFrame(data=total_info,columns=['标题','Url'])df.to_csv(r'C:\Users\116815\Desktop\web_data.csv',index=False,encoding='utf_8_sig')print("保存成功")except:return 'FALSE'if __name__ == '__main__':while True:#循环headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0","Host": "www.baidu.com",}wd = input("输入搜索内容:")num =int(input("输入页数:"))get_url(wd,num)

这样子我们就大功告成啦~,博主这里还有之前写的ajax动态求职网站的数据爬取感兴趣的也可以看下哦

Python爬取百度搜索的标题和真实URL的代码和详细解析相关推荐

  1. python爬取百度搜索_使用Python + requests爬取百度搜索页面

    想学一下怎样用python爬取百度搜索页面,因为是第一次接触爬虫,遇到一些问题,把解决过程与大家分享一下 1.使用requests爬取网页 首先爬取百度主页www.baidu.com import r ...

  2. Python 爬取百度 搜索风云榜 新闻并 自动推送 到邮箱

    本文将使用Python爬取百度新闻搜索指数排名前50的新闻,并通过服务器运行,每天定时发送到指定邮箱. 先上代码: # -*- coding:utf-8 -*- import requests,os, ...

  3. python爬取百度搜索_Python-Scrapy抓取百度数据并分析

    抓取智联招聘和百度搜索的数据并进行分析,使用visual studio编写代码mongodb和SQLServer存储数据.使用scrapy框架结合 selenium爬取百度搜索数据,并进行简要的数据的 ...

  4. python 爬取百度搜索结果url

    简单的爬取百度搜索结果url 先用了requests库来访问百度,再通过xpath来提取搜索后的结果 import requests from lxml import etreefor i in ra ...

  5. Python爬取百度搜索风云榜实时热点.

    Python爬虫实战源码合集(持续更新) 百度搜索风云榜:http://top.baidu.com/ 源码: import os import json from datetime import da ...

  6. python爬取百度搜索答案题目和摘要

    url就自行构造吧 # coding:utf-8 import urllib2 import re from bs4 import BeautifulSoup url = 'http://www.ba ...

  7. python爬虫代码实例-Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬 ...

  8. HttpClient 实现爬取百度搜索结果(自动翻页)

    如果你对HttpClient还不是很了解,建议先移步我的另一篇博客HttpClient4.x之请求示例后再来看这篇博客.我们这里的项目采用maven搭建.在阅读前要对jdk和maven有一定的了解.另 ...

  9. 【爬虫】爬取百度搜索结果页面

    今日看了一下爬虫,写了一个爬取百度搜索页面的小程序.可以在代码中改动搜索词,代码如下: #coding=utf-8 #python version:2.7 #author:sharpdeepimpor ...

最新文章

  1. 这个机械装置真的能够分离彩色小球吗?
  2. inputstream java_Java实现inputstream流的复制
  3. 聚类分析(一)基本思想
  4. android google map 标记,android google map添加标记和TipView
  5. [Delphi]ListView基本用法大全
  6. 平板电脑有哪些品牌_平板电脑充电柜使用要注意哪些?安和力
  7. 有没有测试颜色的软件,用什么软件测试显示器色彩最准:色彩校正软件
  8. 易语言夜神模拟器操控模块调用方法
  9. 尚硅谷 模拟w3school首页导航条练习
  10. UltraEdit编辑器+注册机(windows版)让数据处理更简单
  11. 第七届“和苑和平节”促和平对话、文明健康、青年空间
  12. Unity 文字转语音
  13. 基于Android的蜗要工作app的设计与实现
  14. redis中以层级关系、目录形式存储数据
  15. element el-upload 一次上传单张/多张图片(多选)
  16. 20192132055 李欣桐 第三次作业
  17. C语言假设银行一年存利
  18. 可能是东半球最好的多线程讲义!
  19. Android设置手机壁纸(WallPaper)
  20. Forter在过去12个月营收翻番;融资3亿美元,估值达到30亿美元

热门文章

  1. 2022 年总结 山高路远,看世界,也找自己
  2. 使用php中的switch,php中switch语句用法详解_PHP
  3. map.keySet()踩坑
  4. 【Java】int类型强制转换成long
  5. windows服务器系统的iis日志,Windows server2012 IIs 8 自定义日志记录
  6. mousedown和click冲突处理方法
  7. go-zero入门1
  8. 解决夜神模拟器与Eclipse断开连接,逍遥模拟器与Eclipse断开连接问题
  9. SAP中如何合并会计凭证(Summarizing FI documents)
  10. Spring Boot中Jackson ObjectMapper应用详解