Python怎样快速爬取想要数据?
Admin 2021-08-18 群英技术资讯 412 次浏览
这篇文章给大家分享的是有关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协议的基本语法如下:
1.爬虫的用途
实现浏览器的功能,通过制定的URL,直接返回用户所需要的数据。
一般步骤:
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 表达之上。
四种标签的使用方法
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、滚动字母等,这些“动态效果”只是视觉上的,与下面将要介绍的动态网页是不同的概念。
静态网页的特点
动态网页的基本概述
动态网页是以.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数据爬取的方法,感兴趣的朋友可以参考学习,希望能对大家有帮助,想要了解更多python算法的相关内容,大家可以关注其他文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在这个用例中,我们要讨论的是关于函数的传参问题我所使用的python版本为3.3.2对于函数:def fun(arg): print(arg) def m...
本文详细讲解了Python集成开发环境Pycharm的使用及技巧,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了python返回函数和匿名函数的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要为大家介绍了python网络编程之进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块,下面这篇文章主要给大家介绍了关于Python中条件语句、循环语句和pass语句使用的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008