今天通过Python网络爬虫视频复习了一下以前初学的网络爬虫,了解了网络爬虫的相关规范。
案例:京东的Robots协议
https://www.jd.com/robots.txt
说明可以爬虫的范围
#注释. *代表所有 /代表根目录
robots协议
http://www.baidu.com/robots.txt 百度
http://news.sina.com.cn/robots.txt 新浪新闻
http://www.qq.com/robots.txt 腾讯
http://news.qq.com/robots.txt 腾讯新闻
如果一个网站不设置robots协议说明所有内容都可以爬取
网络爬虫:自动或人工识别robots.txt,再进行内容爬取
约束性:robots协议建议但非约束性,不遵守可能存在法律风险
爬取网页的通用代码框架
#爬取网页的通用代码框架 import requests def getHTMLText(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: return "产生异常" if __name__=="__main__": url="http://www.baidu.com" print(getHTMLText(url))
京东商品页面的爬取,这段代码可以简单爬取京东一个商品页面未经过处理的信息。
#京东商品页面爬取 import requests r=requests.get(‘https://item.jd.com/100000287117.html‘) try: print(r.status_code) print(r.encoding) print(r.text[:1000]) except: print("爬取失败!")
亚马逊商品页面的爬取,与京东类似,但增加了对headers的限制。
#亚马逊商品页面爬取 import requests url=‘https://www.amazon.cn/dp/B01LX4GONW/ref=Oct_DLandingS_rdp_4e4570f3‘ try: kv = {‘user-agent‘: ‘Mozilla/5.0‘} r = requests.get(url, headers=kv) print(r.request.headers) #查看当前访问的headers print(r.status_code) #查看是否错误 print(r.encoding) #查看可能编码 r.encoding=r.apparent_encoding #将编码转换为所提取内容分析过的编码 print(r.text) #提取字符 except: print("爬取失败")
百度360搜索关键词,需要安全验证。
import requests kv={‘wd‘:‘Python‘} try: r=requests.get("http://www.baidu.com/s",params=kv) print(r.status_code) #查看是出错 print(r.encoding) r.encoding=r.apparent_encoding print(r.request.url) #查看完整ur print(len(r.text)) #查看查询结果条目数 print(r.text) except: print("爬取错误!")
爬取图片:
import requests import os url="http://image.ngchina.com.cn/2020/0203/20200203014405762.jpg" root="D://pics//" path=root+url.split(‘/‘)[-1] try: if not os.path.exists(root): os.mkdir(root) if not os.path.exists(path): r = requests.get(url) print(r.status_code) # 检测错误 with open(path,‘wb‘) as f: f.write(r.content) f.close() print("图片保存成功") else: print("图片已存在!") except: print("爬取出错!")
ip地址归属地的自助查询
import requests url="http://m.ip138.com/ip.asp?ip=" try: r = requests.get(url + ‘202.204.80.112‘) print(r.status_code) print(r.text[-500:]) except: print("爬取失败!")
BeautifulSoup类的基本元素
Tag 标签,最基本的信息组织单元,分别是<>和</>标明开头和结尾
Name 标签的名字,<p>...</p>的名字是‘p’格式<tag>.name
Attributes 标签的属性,字典形式组织,格式<tag>.attrs
NavigableString 标签内非属性字符串,<>,...</>中字符串 格式<tag>.string
Comment 标签内字符串的注释部分,一种特殊的Comment类型
import requests from bs4 import BeautifulSoup r=requests.get("http://python123.io/ws/demo.html") #print(r.text) demo=r.text soup=BeautifulSoup(demo,"html.parser") #解析为Beautifulsoup可以理解的汤 print(soup.title) #打印title #print(soup.prettify()) #标签的内容 tag=soup.a #返回第一个标签内容 print(tag) print(type(tag)) #标签的名字 print(soup.a.name)#a标签的名字 print(soup.a.parent.name)#a标签父亲的名字 print(soup.a.parent.parent.name) #a标签的父亲的父亲的名字 print(type(soup.a.name)) #标签的属性 print(tag.attrs) #a标签的属性 print(tag.attrs[‘class‘])#a标签class属性 print(tag.attrs[‘href‘])#a标签href属性的值 print(type(tag.attrs)) #标签内部内容 print(soup.a.string) print(soup.p.string) print(type(soup.p.string))
import requests
path="D:/abc.jpg"
url="http://image.ngchina.com.cn/2020/0203/20200203014405762.jpg"
try:
r=requests.get(url)
print(r.status_code)#检测错误
with open(path,‘wb‘) as f:
f.write(r.content)
except:
print("爬取出错!")
------------恢复内容结束------------
原文:https://www.cnblogs.com/zlc364624/p/12261724.html