首页 > 编程语言 > 详细

假期学习【六】Python网络爬虫2020.2.4

时间:2020-02-04 23:52:03      阅读:165      评论:0      收藏:0      [点我收藏+]

 

今天通过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))
View Code

京东商品页面的爬取,这段代码可以简单爬取京东一个商品页面未经过处理的信息。

技术分享图片
#京东商品页面爬取
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("爬取失败!")
View Code

亚马逊商品页面的爬取,与京东类似,但增加了对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("爬取失败")
View Code

百度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("爬取错误!")
View Code

爬取图片:

技术分享图片
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("爬取出错!")
View Code

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("爬取失败!")
View Code

 

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))
View Code

 

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("爬取出错!")

------------恢复内容结束------------

假期学习【六】Python网络爬虫2020.2.4

原文:https://www.cnblogs.com/zlc364624/p/12261724.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!