php如何抓取网页数据( Robots协议目标网址后加/robots.txt的基本语法)
优采云 发布时间: 2022-02-15 08:24php如何抓取网页数据(
Robots协议目标网址后加/robots.txt的基本语法)
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.机器人协议
将 /robots.txt 附加到目标 URL,例如:
第一个意思是对于所有爬虫,都不能爬进/? 以 /pop/*.html 开头的路径无法访问匹配 /pop/*.html 的路径。
最后四个用户代理的爬虫不允许访问任何资源。
所以Robots协议的基本语法如下:
二、爬虫抓取网页
1.爬虫的目的
实现浏览器的功能,通过指定的URL直接返回用户需要的数据。
一般步骤:
2.网页分析
获取到对应的内容并分析之后,其实需要处理一段文本,从网页中的代码中提取出你需要的内容。BeautifulSoup 实现了惯用的文档导航、搜索和修改功能。如果lib文件夹中没有BeautifulSoup,可以使用命令行安装。
pip install BeautifulSoup
3.数据提取
# 想要抓取我们需要的东西需要进行定位,寻找到标志
from bs4 import BeautifulSoup
soup = BeautifulSoup('',"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='房产'
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="""
test
NO.1
NO.2
NO.3
one
two
"""
#这里使用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])
三、动态网页和静态网页的区别
来源百度:
静态网页的基本概述
静态网页的URL形式通常以.htm、.html、.shtml、.xml等为后缀。静态网页一般是最简单的HTML网页。服务器端和客户端是一样的,没有脚本和小程序,所以不能移动。在 HTML 格式的网页上,也可以出现各种动态效果,比如 .GIF 格式的*敏*感*词*、FLASH、滚动字母等。这些“动态效果”只是视觉上的,与将要实现的动态网页是不同的概念。下面介绍。.
静态网页的特点
动态网页的基本概述
动态网页后缀有.asp、.jsp、.php、.perl、.cgi等形式,并有一个符号——“?” 在动态网页的 URL 中。动态网页与网页上的各种*敏*感*词*和滚动字幕等视觉“动态效果”没有直接关系。动态网页也可以是纯文本内容或收录各种*敏*感*词*。这些只是网页的具体内容。表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页。动态网站也可以采用动静结合的原则。适合在使用动态网页的地方使用动态网页。如果需要使用静态网页,可以考虑使用静态网页。
动态网页应具备以下特点:
总结一下:如果页面内容发生变化,URL也会发生变化。基本上,它是一个静态网页,反之亦然是一个动态网页。
四、动态和静态网页的爬取
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]
总结:以上两个url的区别就在最后一个数字。原页面上下一页的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爬取数据的信息,请搜索脚本之家之前的文章或继续浏览下方的相关文章,希望以后多多支持脚本之家!