Python爬虫教程(16行代码爬百度)
最近在学习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)
Python爬虫教程(16行代码爬百度)的更多相关文章
- Python爬虫初学(二)—— 爬百度贴吧
Python爬虫初学(二)-- 爬百度贴吧 昨天初步接触了爬虫,实现了爬取网络段子并逐条阅读等功能,详见Python爬虫初学(一). 今天准备对百度贴吧下手了,嘿嘿.依然是跟着这个博客学习的,这次仿照 ...
- Python爬虫教程:验证码的爬取和识别详解
今天要给大家介绍的是验证码的爬取和识别,不过只涉及到最简单的图形验证码,也是现在比较常见的一种类型. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻 ...
- 简单的python爬虫教程:批量爬取图片
python编程语言,可以说是新型语言,也是这两年来发展比较快的一种语言,而且不管是少儿还是成年人都可以学习这个新型编程语言,今天南京小码王python培训机构变为大家分享了一个python爬虫教程. ...
- Python爬虫教程-07-post介绍(百度翻译)(上)
Python爬虫教程-07-post介绍(百度翻译)(上) 访问网络两种方法 get: 利用参数给服务器传递信息 参数为dict,使用parse编码 post :(今天给大家介绍的post) 一般向服 ...
- Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)
Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...
- Python爬虫教程-12-爬虫使用cookie爬取登录后的页面(人人网)(上)
Python爬虫教程-12-爬虫使用cookie(上) 爬虫关于cookie和session,由于http协议无记忆性,比如说登录淘宝网站的浏览记录,下次打开是不能直接记忆下来的,后来就有了cooki ...
- Python爬虫教程-08-post介绍(百度翻译)(下)
Python爬虫教程-08-post介绍(下) 为了更多的设置请求信息,单纯的通过urlopen已经不太能满足需求,此时需要使用request.Request类 构造Request 实例 req = ...
- Python爬虫教程-33-scrapy shell 的使用
本篇详细介绍 scrapy shell 的使用,也介绍了使用 xpath 进行精确查找 Python爬虫教程-33-scrapy shell 的使用 scrapy shell 的使用 条件:我们需要先 ...
随机推荐
- mysql基础-新版5.7.10源码安装-记录(一)
0x01 MySQL 从 5.5 版本开始,通过 ./configure 进行编译配置方式已经被取消,取而代之的是 cmake 工具 引用一句话 cmake的重要特性之一是其独立于源码(out-of- ...
- ODEINT 求解常微分方程(1)
An example of using ODEINT is with the following differential equation with parameter k=0.3, the ini ...
- @RequestMAPPPING映射请求占位符@PathVariable注解
@PathVariable:通过@PathVariable 可以将URL 中占位符参数绑定到控制器处理方法的入参中 URL中的{xxx} 占位符可以通过 @PathVariable{"xxx ...
- ThreadLocal源码解析-Java8
目录 一.ThreadLocal介绍 1.1 ThreadLocal的功能 1.2 ThreadLocal使用示例 二.源码分析-ThreadLocal 2.1 ThreadLocal的类层级关系 2 ...
- 记PHP下载大文件失败的一次坑
说明 php提供文件的储存和下载,nginx作为web服务器,fpm做解析. 现象 当下载一个5M大小的图片时,总提示下载失败,或下载下来的文件不完整,仅显示部分图像(每次下载不一样) php下载相关 ...
- 宝塔面板搭载yii2.0项目关于open_basedir报错解决办法
昨天配置完宝塔的lamp后,然后把原本的yii项目放上去,发现出现三个报错,就是大概 require openssl之类的三个错误 然后去宝塔的界面里去配置了一个端口,然后再去阿里云上开放这个端口 ...
- 三角函数与缓入缓出动画及C#实现(图文讲解)
日常经常能看到缓入缓出的动画效果,如: 1,带缓入缓出效果的滚动条: 2,带缓入缓出效果的呼吸灯: 像上面这种效果,就是用到了三角函数相关的知识,下面将从头开始一步步去讲解如何实现这种效果. 一.基础 ...
- MySQL LOAD DATA INFILE—批量从文件(csv、txt)导入数据
最近做的项目,有个需求(从Elastic Search取数据,业务运算后),每次要向MySQL插入1300万数据左右.最初用MySQL的executemany()一次插入10000条数据,统计的时间如 ...
- Elasticsearch修改分词器以及自定义分词器
Elasticsearch修改分词器以及自定义分词器 参考博客:https://blog.csdn.net/shuimofengyang/article/details/88973597
- Docker(三)Docker常用命令
Docker常用命令 帮助命令 # 显示 Docker 版本信息 docker version # 显示系统信息,包括镜像和容器的数量 docker info # 查看帮助文档 帮助文档地址:http ...