最近在学习python,不过有一个正则表达式一直搞不懂,自己直接使用最笨的方法写出了一个百度爬虫,只有短短16行代码。
首先安装必背包:

pip3 install bs4
pip3 install requests

安装好后,输入

import requests
from bs4 import BeautifulSoup

F5运行如果不报错则说明安装成功。
打开浏览器,输入'www.baidu.com',即进入百度,随便搜索什么,我这里用'python'为例
可以发现,百度搜索出来的链接为

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=python****

最后可以简化为:

https://www.baidu.com/s?wd=python

所以首先尝试获取搜索结果的html:

import requests
from bs4 import BeautifulSoup
url='https://www.baidu.com/s?wd='+'python'
headers = {"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","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.16 Safari/537.36"}
html = requests.get(url,headers=headers).text
print(html)

然后,我们再从HTML里面找出我们想要的

可以看爬下来的数据也可以使用谷歌浏览器的F12
这里已谷歌的F12为例

可以发现,div标签中

  • class为'result c-container '的为非百度,非广告的内容(我们需要的内容)
  • class为'result-op c-container xpath-log'的为百度自家的内容(可以按需筛选)
  • class为其它的都为广告

首先定义筛选

soup = BeautifulSoup(html, 'html.parser')

使用for循环找出所有div标签,且class为'result c-container'

for div in soup.find_all('div',class_="result c-container"):
print(div)

让后再次使用for循环在其中找出h3标签

for div in soup.find_all('div',class_="result c-container"):
#print(div)注释掉方便检查代码
for h3 in div.find_all('h3'):
print(h3.text)

再次寻找出标题和链接(a标签)

for div in soup.find_all('div',class_="result c-container"):
#print(div)
for h3 in div.find_all('h3'):
#print(h3.text)
for a in h3.find_all('a'):
print(a.text,' url:',a['href'])

这样,我们就成功屏蔽了广告、百度百科等等
整体代码如下:

import requests
from bs4 import BeautifulSoup
url='https://www.baidu.com/s?wd='+'python'
headers = {"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","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.16 Safari/537.36"}
html = requests.get(url,headers=headers).text
print(html)
soup = BeautifulSoup(html, 'html.parser')
for div in soup.find_all('div',class_="result c-container"):
#print(div)
for h3 in div.find_all('h3'):
#print(h3.text)
for a in h3.find_all('a'):
print(a.text,' url:',a['href'])
#with open(r'C:/爬虫/百度.txt', 'w', encoding='utf-8') as wr:#如果需要将爬下来的内容写入文档,可以加上这两句
# wr.write(page)
顺便说一句,里面的headers是为了隐藏爬虫身份,虽然访问量大的话没用,但不用的话百度直接可以发现你是爬虫从而直接封你的IP,这样会搞得你每次上百度都要输验证码
版权属于:DYblog
请联系并同意后转载!

Python爬虫教程(16行代码爬百度)的更多相关文章

  1. Python爬虫初学(二)—— 爬百度贴吧

    Python爬虫初学(二)-- 爬百度贴吧 昨天初步接触了爬虫,实现了爬取网络段子并逐条阅读等功能,详见Python爬虫初学(一). 今天准备对百度贴吧下手了,嘿嘿.依然是跟着这个博客学习的,这次仿照 ...

  2. Python爬虫教程:验证码的爬取和识别详解

    今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻 ...

  3. 简单的python爬虫教程:批量爬取图片

    python编程语言,可以说是新型语言,也是这两年来发展比较快的一种语言,而且不管是少儿还是成年人都可以学习这个新型编程语言,今天南京小码王python培训机构变为大家分享了一个python爬虫教程. ...

  4. Python爬虫教程-07-post介绍(百度翻译)(上)

    Python爬虫教程-07-post介绍(百度翻译)(上) 访问网络两种方法 get: 利用参数给服务器传递信息 参数为dict,使用parse编码 post :(今天给大家介绍的post) 一般向服 ...

  5. Python爬虫教程-17-ajax爬取实例(豆瓣电影)

    Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...

  6. Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)

    Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...

  7. Python爬虫教程-12-爬虫使用cookie爬取登录后的页面(人人网)(上)

    Python爬虫教程-12-爬虫使用cookie(上) 爬虫关于cookie和session,由于http协议无记忆性,比如说登录淘宝网站的浏览记录,下次打开是不能直接记忆下来的,后来就有了cooki ...

  8. Python爬虫教程-08-post介绍(百度翻译)(下)

    Python爬虫教程-08-post介绍(下) 为了更多的设置请求信息,单纯的通过urlopen已经不太能满足需求,此时需要使用request.Request类 构造Request 实例 req = ...

  9. Python爬虫教程-33-scrapy shell 的使用

    本篇详细介绍 scrapy shell 的使用,也介绍了使用 xpath 进行精确查找 Python爬虫教程-33-scrapy shell 的使用 scrapy shell 的使用 条件:我们需要先 ...

随机推荐

  1. Jmeter连接数据库进行参数化

    实际使用Jmeter进行性能测试或接口测试自动化过程中,很多场景需要从数据库中获取一些关键性参数,或进行一些断言,比较,那么如何进行数据库连接以及怎么获取参数就变得尤为重要 一.下载mysql驱动 1 ...

  2. CDN百科 | 最近,你的APP崩了吗?

    过去几个月里,#xxx崩了#这个话题频繁出现在热搜榜上,让不少程序员小哥哥瑟瑟发抖. 从疫情宅家时期著名的视频APP“三连崩”,到全面复工开课后的在线教育平台与办公软件频繁宕机,再到报复性消费引发的点 ...

  3. Email地址验证

    <script>function validateForm(){ var x=document.forms["myForm"]["email"].v ...

  4. php 加反斜杠的原因与处理办法

    php程序加反斜杠的原因就是要进行特殊字符的转义. 默认PHP 指令 magic_quotes_gpc是on的,这时候就可以用stripslashes() 函数删除自动添加的反斜杠. 用法就是:str ...

  5. (七)MySQL常见的数据类型、约束和标识列

    一.MySQL常见数据类型 1.数值型: ①整型:tinyint.smllint.mediumint.int/integer.bigint 图源:尚硅谷李玉婷 案例1:关键表格teacher,分别添加 ...

  6. CentOS7.5搭建spark2.3.1集群

    一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2  安装前提 Java8         安装成功 zookeeper  安 ...

  7. nuget 包是如何还原包的

    nuget 是如何还原包的 Intro 一直以来从来都是用 nuget 包,最近想折腾一个东西,需要自己搞一个 nuget 包的解析,用户指定 nuget 包的名称和版本,然后去解析对应的 nuget ...

  8. debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7

    目录 debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7 1.概览 2.建立用户 3.编译postgre 4.启动Eclipse 5.设置环境变量 ...

  9. 08.利用Easymock测试简单的servlet

    1.首先导入需要使用的servlet的jar包 接下来我们编写一个登陆的servlet package com.fjnu.service; import java.net.HttpRetryExcep ...

  10. Python学习之准备工作

    Python学习之准备工作 编程语言历史 在计算机硬件基础中我们大概介绍了一下计算机的发展历史.了解到在曾经有一段时期里计算机是不存在操作系统这一概念的,所有需要计算机完成的操作都需要当时的程序员来与 ...