爬虫之Beautfulsoup模块及新闻爬取操作
今日内容概要
IP代理池的概念及使用
requests其他方法补充
Beautifulsoup模块
避免你自己写正则表达式
利用该模块爬取京东的商品信息
今日内容详细
IP代理池的概念及使用
1.有很多网站在防爬措施上面都加了封禁IP的措施
一旦我的网站发现某一个IP在固定的时间内访问了很多次(一分钟访问了30次),那么我会直接获取到该请求对应的主机IP地址,然后加入网站的黑名单
刚请求来访问我的网站的时候我会先去黑名单中查看当前请求的IP在不在如果在直接拒绝
如果不在才会进去下一个环节
针对上述IP封禁的情况,出现了IP代理池
IP代理池里面有很多IP,你每次访问别人的网站的时候
随机从池子里面有很多IP
具体使用
# 代理的网址获取有免费的也有收费的
import requests
proxies={'https':'123.163.117.55:9999',
'https':'123.163.117.55:9999',
'https':'123.163.117.55:9999',
}
respone=requests.get('https://www.12306.cn',
proxies=proxies)
print(respone.status_code)
超时设置
#超时设置
#两种超时:float or tuple
#timeout=0.1 #代表接收数据的超时时间
#timeout=(0.1,0.2)#0.1代表链接超时 0.2代表接收数据的超时时间
import requests
respone=requests.get('https://www.baidu.com',
timeout=0.0001)
异常处理
# 万能异常
try:
# kasd
l = [111,222]
l[3]
except Exception as e:
print(e)
发送文件
import requests
files={'file':open('a.txt','rb')}
respone=requests.post('http://httpbin.org/post',
files=files)
print(respone.status_code)
解析json
#解析json
import requests
response=requests.get('http://httpbin.org/get')
import json
res1=json.loads(response.text) #太麻烦
res2=response.json() #直接获取json数据
print(res1 == res2) #True
Beautiful Soup模块
Beautiful Soup会帮你节省数小时甚至数天的工作时间
# 安装 Beautiful Soup
pip install beautifulsoup4 # 这个4千万不要少了
# 解析器
有四种 常用的两种
html.parse 内置的不需要下载
lxml 需要下载
pip3 install lxml
# 导入
from bs4 import BeautifulSoup
基本使用
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
from bs4 import BeautifulSoup
# 先将html页面内容传入BeautifulSoup 生成一个对象
soup = BeautifulSoup(html_doc, 'lxml') # 具有容错功能
res = soup.prettify() # 处理好缩进,结构化显示 美化
print(res)
爬取汽车之家新闻
1.爬取汽车之家的新闻数据
2.先查看汽车之家新闻加载规律
默认会先展示一个ul
下面隐藏了三个ul
最后有一个分页器
3.研究分页页码变化
https://www.autohome.com.cn/news/1/#liststart
https://www.autohome.com.cn/news/2/#liststart
https://www.autohome.com.cn/news/3/#liststart
https://www.autohome.com.cn/news/4/#liststart
4.访问新闻数据页 研究是否有一些简单的防爬措施
5.研究新闻数据都在哪个标签内
6.从标签内提取想要的新闻数据,并移除干扰项
# 代码
res = requests.get(url) # 前期访问没有任何的小防爬措施
# print(res.text)
# 将爬取到的页面传入bs4类中生成对象
soup = BeautifulSoup(res.text,'lxml')
# 查找新闻所在的标签 然后获取标签内想要的数据
# 1.查找div标签
div = soup.find(id='auto-channel-lazyload-article') # 利用id查找标签
# print(div)
# 2.找ul标签
ul = div.find(name='ul') # 利用标签名查找标签 只拿第一个
# ul_list=div.find_all(class_="article") #找出下面所有类名为article的标签 class关键字所以需要加下划线区分
# print(len(ul_list))
# print('+++++++++++++++++++++++++++')
# print(ul)
# 3.找li标签
# li = ul.find(name='li') # 只会拿到第一个
li_list = ul.find_all(name='li') # 拿内部所有的li 并且组织成列表的形式
# 4.从li中提取我们想要的数据
"""
<li data-artidanchor="1038223">
<a href="//www.autohome.com.cn/news/202009/1038223.html#pvareaid=102624">
<div class="article-pic"><img src="//www2.autoimg.cn/newsdfs/g3/M01/B5/C1/120x90_0_autohomecar__ChsEkV9i0DiAKHchAAGGvdkeT_A835.jpg"/></div>
<h3>主打年轻化市场 宝马128ti低伪谍照曝光</h3>
<div class="article-bar">
<span class="fn-left">30分钟前</span>
<span class="fn-right">
<em><i class="icon12 icon12-eye"></i>827</em>
<em data-articleid="1038223" data-class="icon12 icon12-infor"><i class="icon12 icon12-infor"></i>0</em>
</span>
</div>
<p>[汽车之家 海外谍照] 日前,宝马集团官方放出了一组宝马128ti的轻度伪装图,这款车已在纽博格林赛道完成了最后的测试,并将于11月在海外市场投放。...</p>
</a>
</li>
"""
# for循环依次获取数据
for li in li_list:
# 1.先获取新闻的标题
h3 = li.find(name='h3')
# print(h3)
# 优化 移除干扰项
if h3:
# 获取h3里面的文本
news_title = h3.text
# print(news_title)
# 2.获取新闻链接
a = li.find(name='a')
# 移除干扰项
if a:
news_link = a.get('href')
# print(news_link)
# 3.获取图片链接
img = li.find(name='img')
if img:
news_img = img.get('src')
# print(news_img)
# 4.获取新闻简介
p = li.find(name='p')
if p:
news_info = p.text
# print(news_info)
res = """
新闻标题:%s
新闻链接:%s
新闻图片:%s
新闻简介:%s
"""%(h3,news_link,news_img,news_info)
print(res)
更多操作方法
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p id="my p" class="title jason" username="jason">123<b id="bbb" class="boldest">The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc,'lxml')
# print(soup.a) # 查找a标签 只会拿第一个
# print(soup.p.name) # 获取标签名
# print(soup.p.attrs) # 用字典的形式给你列举出标签所有的属性
# {'id': 'my p', 'class': ['title'], 'username': 'jason'}
print(soup.p.text) # 获取p标签内部所有的文本
# string用的很少
# print(soup.p.string) # 只有p下面有单独的文本的时候才能拿到
总结
1.查找标签非常的简单
find()
find_all()
"""
括号内常用的参数
name 根据标签的名字查找标签
id 根据标签的id查找标签
class_ 根据标签的class查找
"""
2.查找标签内部的文本
标签对象.text
3.查找标签属性对应的值
a标签的href属性对应的值
a.get('href')
img标签的src属性对应的值
img.get('src')
爬虫之Beautfulsoup模块及新闻爬取操作的更多相关文章
- python爬虫学习之使用BeautifulSoup库爬取开奖网站信息-模块化
实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件和excel文件. 实 ...
- 另类爬虫:从PDF文件中爬取表格数据
简介 本文将展示一个稍微不一样点的爬虫. 以往我们的爬虫都是从网络上爬取数据,因为网页一般用HTML,CSS,JavaScript代码写成,因此,有大量成熟的技术来爬取网页中的各种数据.这次, ...
- Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)
Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...
- python网络爬虫之解析网页的BeautifulSoup(爬取电影图片)[三]
目录 前言 一.BeautifulSoup的基本语法 二.爬取网页图片 扩展学习 后记 前言 本章同样是解析一个网页的结构信息 在上章内容中(python网络爬虫之解析网页的正则表达式(爬取4k动漫图 ...
- scrapy中间件之下载中间件使用(网易新闻爬取)
scrapy项目中的middlewarse.py中间件 爬虫中间件:目前先不介绍 下载中间件(需要在settings.py中开启) (1)请求处理函数:process_request(self, re ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- 爬虫系列4:Requests+Xpath 爬取动态数据
爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...
- 爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中
爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中 准备使用的环境和库Python3.6 + requests + bs4 + csv + multi ...
- [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息
[Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫 版权声明: ...
随机推荐
- 怎么重载网卡?ip修改 HHS服务器
目录 一:目录结构知识详述 1.网卡配置文件 2,ip修改 3.重载网卡信息 4.关闭网络管理器(因为已经有了network)所有要关闭NetworkManager不然会发生冲突 5.判断SSH服务是 ...
- 搭建sublime.txt环境结合使用python
{ "cmd": ["python3", "-u", "$file"] }
- Java语法专题2: 类变量的初始化顺序
合集目录 Java语法专题2: 类变量的初始化顺序 问题 这也是Java面试中出镜率很高的基础概念问题 描述一下多级继承中字段初始化顺序 描述一下多级继承中类变量初始化顺序 写出运行以下代码时的控制台 ...
- GitHubPages的域名解析信息
github目录下CNAME修改
- Java枚举类在生产环境中的使用方式
前言 Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些业务场景状态的时候,往往会定义一个常量类,然后添加业务场景相关的状态常量.但实际上,生产环境的项目中业务状态的定义大部 ...
- 10分钟了解代码命名规范(Java、Python)
前言 关于代码命名,我相信是经常困扰很多小伙伴的一个问题,尤其是对于强迫症晚期患者.怎么说呢,每次小编在写代码之前,总会在想啊想啊,用什么命名法好呢?对于经常在C++.Java.Python等主流语言 ...
- 在Rainbond中实现数据库结构自动化升级
Rainbond 这款产品一直致力于打通企业应用交付的全流程,这个流程中不可或缺的一环是企业应用的不断升级.迭代.Rainbond 特有的能力,是可以将囊括多个服务组件的企业应用系统进行打包,并执行一 ...
- lua语言:string
转载请注明来源:https://www.cnblogs.com/hookjc/ 字符串库函数string.len(s) 返回字符串s的长度:string.rep(s, n) ...
- EasyExcel小试牛刀
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/12029411.html 某种偶然的机会遇到了这个插件, 听说很牛X, 我之前也不知道, 不过还 ...
- 在linux下的mysql导入存储过程出现语法错误,需要在文件里加DELIMITER //
http://my.oschina.net/zerotime/blog/113126 Mysql命令行创建存储过程时,首先要输入分隔符 DELIMITER // CREATE PROCEDURE pr ...