我的编程空间,编程开发者的网络收藏夹
学习永远不晚

教你如何使用Python快速爬取需要的数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

教你如何使用Python快速爬取需要的数据

一、基础第三方库使用

1.基本使用方法


"""例"""
from urllib import request
response = request.urlopen(r'http://bbs.pinggu.org/') 
#返回状态 200证明访问成功
print("返回状态码:  "+str(response.status))
#读取页面信息转换文本并进行解码,如果本身是UTF-8就不要,具体看页面格式
#搜索“charset”查看编码格式
response.read().decode('gbk')[:100]

在这里插入图片描述

2.Request

使用request()来包装请求,再通过urlopen()获取页面。俗称伪装。让服务器知道我们是通过浏览器来访问的页面,有些情况可能会被直接毙掉。


url = r'http://bbs.pinggu.org/'
headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
           'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
           'Connection': 'keep-alive'}
req = request.Request(url, headers=headers)
page = request.urlopen(req).read()
page = page.decode('gbk')
page[:100]

在这里插入图片描述

包含data的方法。

在这里插入图片描述


import urllib.parse
url = r'https://new-api.meiqia.com/v1/throttle/web?api_name=%2Fvisit%2Finit&ent_id=7276&v=1534848690048'
headers = {'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
           'Referer': r'http://www.lagou.com/zhaopin/Python/?labelWords=label',
           'Connection': 'keep-alive'}
values={'api_name':'/visit/init','ent_id':'7276','v':'1534848690048'}
data = urllib.parse.urlencode(values).encode(encoding='UTF8')
req = request.Request(url, data,headers=headers)
page = request.urlopen(req).read()
page = page.decode('gbk')

3.异常处理


from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("//www.jb51.net /")
try:
    response = urlopen(req)
except HTTPError as e:
    print('服务器无法满足请求.')
    print('错误代码: ', e.code)
except URLError as e:
    print('不能访问服务器.')
    print('原因: ', e.reason)
else:
    print("OK!")
    print(response.read().decode("utf8"))

在这里插入图片描述


from urllib.request import Request, urlopen
from urllib.error import  URLError
req = Request("//www.jb51.net /")
try:
    response = urlopen(req)
except URLError as e:
    if hasattr(e, '原因'):
        print('不能访问服务器.')
        print('原因: ', e.reason)
    elif hasattr(e, '代码'):
        print('服务器无法满足请求.')
        print('错误代码: ', e.code)
    else:
        print("OK!")
        print(response.read().decode("utf8"))

在这里插入图片描述

4.HTTP认证


import urllib.request
 
# 私密代理授权的账户
user = "user_name"
# 私密代理授权的密码
passwd = "uesr_password"
# 代理IP地址  比如可以使用百度西刺代理随便选择即可
proxyserver = "177.87.168.97:53281"
# 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码
passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
# 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器、用户名、密码
passwdmgr.add_password(None, proxyserver, user, passwd)
# 3. 构建一个代理基础用户名/密码验证的ProxyBasicAuthHandler处理器对象,参数是创建的密码管理对象
#   注意,这里不再使用普通ProxyHandler类了
proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr)
# 4. 通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler 和 proxyauth_handler
opener = urllib.request.build_opener(proxyauth_handler)
# 5. 构造Request 请求
request = urllib.request.Request("http://bbs.pinggu.org/")
# 6. 使用自定义opener发送请求
response = opener.open(request)
# 7. 打印响应内容
print (response.read())

5.ROBOT协议

目标网址后加/robots.txt,例如:https://www.jd.com/robots.txt

在这里插入图片描述

第一个的意思就是说对于所有的爬虫,不能爬取在/?开头的路径,也不能访问和/pop/*.html 匹配的路径。
后面四个用户代理的爬虫不允许访问任何资源。

所以Robots协议的基本语法如下:

  • User-agent: 这里是爬虫的名字
  • Disallow: /该爬虫不允许访问的内容。

二、爬虫的网页抓取

1.爬虫的用途

实现浏览器的功能,通过制定的URL,直接返回用户所需要的数据。

一般步骤:

  • 查找域名对应的IP地址 (比如:119.75.217.109是哪个网站?)。
  • 向对应的IP地址发送get或者post请求。
  • 服务器相应结果200,返回网页内容。
  • 开始抓你想要的东西吧。

2.网页分析

获取对应内容之后进行分析,其实就需要对一个文本进行处理,把你需要的内容从网页中的代码中提取出来的过程。BeautifulSoup可实现惯用的文档导航、查找、修改文档功能。如果lib文件夹下没有BeautifulSoup的使用命令行安装即可。


pip install BeautifulSoup

3.数据提取


# 想要抓取我们需要的东西需要进行定位,寻找到标志
from bs4 import BeautifulSoup
soup = BeautifulSoup('<meta content="all" name="robots" />',"html.parser")
tag=soup.meta

# tag的类别
type(tag)
>>> bs4.element.Tag

# tag的name属性
tag.name
>>> 'meta'

# attributes属性
tag.attrs
>>> {'content': 'all', 'name': 'robots'}

# BeautifulSoup属性
type(soup)
>>> bs4.BeautifulSoup
soup.name
>>> '[document]'

# 字符串的提取
markup='<b><a href="http://house.people.com.cn/" rel="external nofollow"  target="_blank">房产</a></b>'
soup=BeautifulSoup(markup,"lxml")
text=soup.b.string
text
>>> '房产'
type(text)
>>> bs4.element.NavigableString

4.BeautifulSoup 应用举例


import requests
from bs4 import BeautifulSoup
url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
html = requests.get(url)
soup =  BeautifulSoup(html.text,"lxml")

在这里插入图片描述


#通过页面解析得到结构数据进行处理
from bs4 import BeautifulSoup
soup=BeautifulSoup(html.text,"lxml")

#定位
lptable = soup.find('table',width='780')

# 解析
for i in lptable.find_all("td",width="680"):    
    title = i.b.strong.a.text
    href = "http://www.cwestc.com"+i.find('a')['href']
#     href = i.find('a')['href']
    date = href.split("/")[4]
    print (title,href,date)

在这里插入图片描述

4.Xpath 应用举例

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。

四种标签的使用方法

  • // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。
  • / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
  • /text() 获取当前路径下的文本内容
  • /@xxxx 提取当前路径下标签的属性值
  • | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。
  • . 点 用来选取当前节点
  • … 双点 选取当前节点的父节点

from lxml import etree

html="""
<!DOCTYPE html>
<html>
<head lang="en">
    <title>test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<div id="content">
    <ul id="ul">
        <li>NO.1</li>
        <li>NO.2</li>
        <li>NO.3</li>
    </ul>
    <ul id="ul2">
        <li>one</li>
        <li>two</li>
    </ul>
</div>
<div id="url">
    <a href="http://www.crossgate.com" rel="external nofollow"  title="crossgate">crossgate</a>
    <a href="http://www.pinggu.org" rel="external nofollow"  title="pinggu">pinggu</a>
</div>
</body>
</html>
"""

#这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容
selector=etree.HTML(html)
content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') 
for i in content:
    print (i)

在这里插入图片描述


#这里使用//从全文中定位符合条件的a标签,使用“@标签属性”获取a便签的href属性值
con=selector.xpath('//a/@href') 
for i in con:
    print (i)

在这里插入图片描述


#使用绝对路径 #使用相对路径定位 两者效果是一样的
con=selector.xpath('/html/body/div/a/@title') 
print (len(con))
print (con[0],con[1])

在这里插入图片描述

三、动态网页和静态网页的区分

来源百度:

静态网页的基本概述

静态网页的网址形式通常是以.htm、.html、.shtml、.xml等为后后缀的。静态网页,一般来说是最简单的HTML网页,服务器端和客户端是一样的,而且没有脚本和小程序,所以它不能动。在HTML格式的网页上,也可以出现各种动态的效果,如.GIF格式的动画、FLASH、滚动字母等,这些“动态效果”只是视觉上的,与下面将要介绍的动态网页是不同的概念。

静态网页的特点

  • 静态网页每个网页都有一个固定的URL,且网页URL以.htm、.html、.shtml等常见形式为后缀,而不含有“?”。
  • 网页内容一经发布到网站服务器上,无论是否有用户访问,每个静态网页的内容都是保存在网站服务器上的,也就是说,静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件。
  • 静态网页的内容相对稳定,因此容易被搜索引擎检索。
  • 静态网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作方式比较困难。
  • 静态网页的交互性交叉,在功能方面有较大的限制。

动态网页的基本概述

动态网页是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号——“?”。动态网页与网页上的各种动画、滚动字幕等视觉上的“动态效果”没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页.动态网站也可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。

动态网页应该具有以下几点特色:

  • 交互性:即网页会根据用户的要求和选择而动态改变和响应。例如访问者在网页填写表单信息并提交,服务器经过处理将信息自动存储到后台数据库中,并打开相应提示页面。
  • 自动更新:即无需手动操作,便会自动生成新的页面,可以大大节省工作量。例如,在论坛中发布信息,后台服务器将自动生成新的网页。
  • 随机性:即当不问的时间、不问的人访问同一网址时会产生不同的页面效果。例如,登录界面自动循环功能。
  • 动态网页中的“?”对搜索引擎检索存在一定的问题,搜索引擎一般不可能从一个网站的数据库中访问全部网页,或者出于技术方面的考虑,搜索蜘蛛不去抓取网址中“?”后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理才能适应搜索引擎的要求。

总结来说:页面内容变了网址也会跟着变基本都是静态网页,反之是动态网页。

四、动态网页和静态网页的抓取

1.静态网页


import requests
from bs4 import BeautifulSoup
url = "http://www.cwestc.com/MroeNews.aspx?gd=1"
html = requests.get(url)
soup =  BeautifulSoup(html.text,"lxml")
soup.text[1900:2000]

在这里插入图片描述


import requests
from bs4 import BeautifulSoup
url = "http://www.cwestc.com/MroeNews.aspx?gd=2"
html = requests.get(url)
soup =  BeautifulSoup(html.text,"lxml")
soup.text[1900:2000]

在这里插入图片描述

总结:上面2个url差别在最后一个数字,在原网页上每点下一页网址和内容同时变化,我们判断:该网页为静态网页。

2.动态网页


import requests
from bs4 import BeautifulSoup
url = "http://news.cqcoal.com/blank/nl.jsp?tid=238"
html = requests.get(url)
soup =  BeautifulSoup(html.text,"lxml")
soup.text

在这里插入图片描述
在这里插入图片描述

抓取该网页看不到任何的信息证明是动态网页,正确抓取方法如下。

在这里插入图片描述


import urllib
import urllib.request
import requests

url = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"
post_param = {'pageNum':'1',\
              'pageSize':'20',\
              'jsonStr':'{"typeid":"238"}'}
return_data = requests.post(url,data =post_param)
content=return_data.text
content

在这里插入图片描述

到此这篇关于教你如何使用Python快速爬取需要的数据的文章就介绍到这了,更多相关Python爬取数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

教你如何使用Python快速爬取需要的数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用python爬取电商数据

要使用Python爬取电商数据,可以按照以下步骤进行:1. 确定目标网站:首先要确定你要爬取的电商网站,以及你要爬取的数据类型。2. 分析网站结构:使用开发者工具或者浏览器插件,查看目标网站的源代码,分析网站的结构和数据获取方式。3. 安装
2023-08-23

手把手教你实现Python连接数据库并快速取数的工具

在数据生产应用部门,取数分析是一个很常见的需求,实际上业务人员需求时刻变化,最高效的方式是让业务部门自己来取。本文就来手把手教大家搭建一个 Python 连接数据库,快速取数工具,需要的可以参考一下
2022-11-13

如何使用Python爬取各大高校数据

这篇文章主要介绍如何使用Python爬取各大高校数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、获取url打开中国教育在线网,按 F12,顶部选择NetWork,选择XHR刷新页面,观察url,通过对Repon
2023-06-15

一文教你如何快速学会Go的struct数据类型

结构是表示字段集合的用户定义类型。它可以用于将数据分组为单个单元而不是将每个数据作为单独的值的地方。本文就来和大家聊聊Go中struct数据类型的使用,需要的可以参考一下
2023-03-07

一文教你如何快速学会Go的切片和数组数据类型

数组是属于同一类型的元素的集合。切片是数组顶部的方便、灵活且功能强大的包装器。本文就来和大家聊聊Go中切片和数组的使用,需要的可以参考一下
2023-03-07

如何用Python爬取马蜂窝的出行数据

这期内容当中小编将会给大家带来有关如何用Python爬取马蜂窝的出行数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。正值火辣的暑假,朋友圈已经被大家的旅行足迹刷屏了,真的十分惊叹于那些把全国所有省基本走
2023-06-17

python如何使用XPath解析数据爬取起点小说网数据

小编给大家分享一下python如何使用XPath解析数据爬取起点小说网数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python的数据类型有哪些?python
2023-06-14

如何使用Python爬取历年高考数据并分析

这篇文章给大家分享的是有关如何使用Python爬取历年高考数据并分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。开发工具**Python版本:**3.6.4相关模块:pyecharts模块;以及一些Python
2023-06-15

Win7超级实用的快速操作技巧总结教你如何使用win7

如果你已经升级到 Windows 7,并且喜欢新的任务栏, 也享受非常酷的库功能的力量。不过现在你想要更多编程。你想要酷酷http://www.cppcns.com的提示和技巧使得 Windows 7更加有趣。那么这里有帮你更加有效利用新操
2023-06-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录