python爬虫基础知识—03爬虫实例

爬虫的问题
1、爬虫的尺寸
爬取网页:小规模,数据量小,——requests库
爬取网站:中规模,数据规模较大,爬取速度敏感,scrapy库
爬取全网:大规模,搜索引擎,爬取数据,定制开发,像谷歌背后等

网络爬虫的法律风险,服务器上的数据产权所有

服务器限制网站爬虫:
1、来源审查:判断User_Agent进行限制
    检查来访问http协议头的User_Agent域,只响应浏览器或友好爬虫访问
    requests.get(url,headers=)
2、发布公告
    告知爬虫网站的爬取策略
    
Robots协议:网络爬虫排除标准
作用:高数爬虫网站那些可以抓,那些不行
形式:在网站根目录下的robots.txt文件
https://www.jd.com/robots.txt
http://baidu.com/robots.txt

约束性:爬虫可以不遵守,但是有法律风险,类人类行为可不参考robots协议

爬虫实例

1、爬取京东商品
https://item.jd.com/100003800400.html
import requests
r=requests.get("https://item.jd.com/100003800400.html")
r.raise_for_status()
r.encoding=r.apparent_encoding
print(r.text[:1000])

2、爬取亚马逊图书
kv={'user-agent':'Mozilla/5.0'}告诉亚马逊我的头部user-agent为Mozilla/5.0
import requests
url="https://www.amazon.cn/dp/B01NAS120J?_encoding=UTF8&ref_=pc_cxrd_658390051_bestTab_658390051_a_best_1&pf_rd_p=08a249ad-ca97-4ee4-8ad2-61ba933d7738&pf_rd_s=merchandised-search-5&pf_rd_t=101&pf_rd_i=658390051&pf_rd_m=A1AJ19PSB66TGU&pf_rd_r=2GKXC26DSGKGFW09N6Y5&pf_rd_r=2GKXC26DSGKGFW09N6Y5&pf_rd_p=08a249ad-ca97-4ee4-8ad2-61ba933d7738"
try:
    kv = {'user-agent': 'Mozilla/5.0'}
    r=requests.get(url,headers=kv)
    r.raise_for_status()
    r.encoding=r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("爬取失败")
    
3、百度/360搜索引擎关键词提交
搜索引擎关键词提交接口
百度的关键词接口:
http://www.baidu.com/s?wd=keyword

360的关键词接口:
http://www.so.com/s?q=keyword
在这两个接口中只要替换keyword就可以提交关键词
百度搜索全代码
import requests
try:
    kv={"wd":"python"}
    r=requests.get("http://www.baidu.com/s",params=kv)
    print(r.request.url)
    r.raise_for_status()
    print(len(r.text))
except:
    print("爬取失败")

360 
kv={'q':keyword}
http://www.so.com/s

4、网络图片耳朵爬取和存储
(对网站上的任何二进制数据都可以爬取)
网络图片链接的格式:http://www.example.com/picture.jpg
国家地理:
http://www.nationalgeographic.com.cn/

爬取图像简单代码
import requests
url="https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/crop%3D0%2C420%2C730%2C800/sign=91d0d399adcc7cd9ee626e9904310d0b/bf096b63f6246b60314c7a00e5f81a4c510fa200.jpg"
path="E:/picture/abc.jpg"
r=requests.get(url)
r.status_code
with open(path,'wb') as f:
    f.write(r.content)  #r.content可以返回图片的二进制形式
    f.close()

爬取全代码
import requests
import os
url="http://www.pptbz.com/pptpic/UploadFiles_6909/201203/2012031220134655.jpg"
root="E:/picture"
path=root+url.split('/')[-1]#为[-1]则只保留最后一个 /后面的内容,自动删掉 /前面内容
try:
    if not os.path.exists(root):
        os.mkdir(root)
    if not os.path.exists(path):
        r=requests.get(url)
        with open(path,'wb') as f:
            f.write(r.content)
            f.close()
            print("文件保存成功")
    else:
        print("文件已存在")
except:
    print("获取失败")

5、ip地址归属地的自动查询
import requests
url="http://m.ip138.com/ip.asp?ip="
try:
    r=requests.get(url+'202.204.80.112')
    r.raise_for_status()
    r.encoding=r.apparent_encoding
    print(r.text[-500:])
except:
    print("爬取失败")


 

猜你喜欢

转载自blog.csdn.net/yulizan9165/article/details/89197746
今日推荐