爬虫MOOC 第一周 入门

    xiaoxiao2021-03-25  109

    Python网络爬虫与信息提取

    讲师:嵩天

    第一步 安装测试Request库

    # -*- coding:utf-8 -*- import requests r = requests.get("http://www.baidu.com") # requests 是 Response对象,包含了爬虫返回的内容 # get 是 Request对象 print r.status_code # 200 表示链接上了,404 表示失败 r.encoding = 'utf-8' print r.textPython

    ===========================================================================

    ======================================================================================

    上 http://www.jd.com/robots.txt

    可以看见 robots 协议。

    robots 协议一定在网站根目录。

    User-agent: * #任何来源的爬虫 Disallow: /?* #任何爬虫都不能访问 ?* 数据 Disallow: /pop/*.html #任何爬虫都不能访问 /pop/*.html, 其中 / 表示根目录 Disallow: /pinpai/*.html?* User-agent: EtaoSpider # 这四种爬虫都不能爬京东的任何资源 Disallow: / User-agent: HuihuiSpider Disallow: / User-agent: GwdangSpider Disallow: / User-agent: WochachaSpider Disallow: /

    那么爬虫要遵守这个协议,除非访问量非常小。

    ============================================================

    实例1:京东爬虫

    http://item.jd.com/2967929.html

    以这个网页为例子:

    # -*- coding:utf-8 -*- import requests url = "http://item.jd.com/2967929.html" try:     r = requests.get(url)     r.raise_for_status() # 如果失败则返回错误,直接跳到 except     r.encoding = r.apparent_encoding      # 编码方式为自动选择为apparent_encoding     # r.encoding = 'GBK' # 这个网页编码是GBK     print r.text[:1000] # 前1000个字符 except:     print("爬取失败")

    ============================================================

    实例2:亚马逊爬虫

    https://www.amazon.cn/gp/product/B01M8L5Z3Y

    亚马逊会拒绝实例1的爬虫,返回错误503,因此要更改一下头部信息。

    # -*- coding:utf-8 -*- import requests kv = {'user-agent':'Mozilla/5.0'} #重新定义 user-agent 内容,模拟浏览器 url = "https://www.amazon.cn/gp/product/B01M8L5Z3Y" try: r = requests.get(url, headers = kv) r.raise_for_status() # 如果失败则返回错误,直接跳到 except # 亚马逊这里是错误 503 r.encoding = r.apparent_encoding # 编码方式为自动选择为apparent_encoding # r.encoding = '...' # 这个网页编码是... print r.text[:1000] # 前1000个字符 except: print("爬取失败")

    ============================================================================

    实例3:百度/360搜索关键词提交

    Baidu关键词接口:

    http://www.baidu.com/s?wd=keyword

    360关键词接口:

    http://www.so.com/s?q=keyword

    # -*- coding:utf-8 -*- import requests kv = {'wd':'Python'} # 关键词 Python try: r = requests.get("http://www.baidu.com/wd", params = kv) # 通过 params 注入关键词 r.raise_for_status() # 如果失败则返回错误,直接跳到 except print r.request.url # 打印 url 发现加入了关键词 print len(r.text) # 打印返回信息的大小 except: print("爬取失败") 360同理,我们小小变化一下:

    # -*- coding:utf-8 -*- import requests keyword = 'Python' # 关键词 Python try:     kv = {'q':keyword}     r = requests.get("http://www.so.com/s", params = kv) # 通过 params 注入关键词     r.raise_for_status() # 如果失败则返回错误,直接跳到 except     print r.request.url # 打印 url 发现加入了关键词     print len(r.text) # 打印返回信息的大小 except:     print("爬取失败")

    返回的信息都很长,这里就别打印了,看看长度就行了。

    ===========================================================================

    实例4:网络图片的爬取和存储

    网络图片链接格式:

    http://www.example.com/picture.jpg

    实际链接:

    http://image.nationalgeographic.com.cn/2017/0211/20170211061910157.jpg

    # -*- coding:utf-8 -*- import requests import os root = "C:\Users\Administrator\Desktop\Python\MOOC\ " # 保存在这里 url = 'http://image.nationalgeographic.com.cn/2017/0211/20170211061910157.jpg' path = root + url.split('/')[-1] #path 为 root 加上 url中 / 分割的倒数第一部分 try: if not os.path.exists(root): # 如果路径不存在 os.mkdit(root) #新建文件夹 if not os.path.exists(path): # 如果文件不存在 r = requests.get(url) with open(path, 'wb') as f: # 打开了一个文件,定义为文件标识符 f f.write(r.content) # 返回的内容 r.content 写入文件中,r.content 是文件的二进制形式 f.close() # 关闭文件 print "Picture have been saved successfully." else: print "Picture already existed." except: print "Fail."

    现在打开文件夹看看,发现已经存在啦~ ==================================================================================

    实例5: IP 地址归属地的自动查询

    www.ip138.com

    这个网站的 IP 地址输入接口为:

    http://m.ip138.com/ip.asp?ip=ipaddress

    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:] # 倒数500字节 except: print "Fail." 这个例子的意义在于说明人机交互提交信息都是以url链接的形式提交的。

    =======================================================================

    转载请注明原文地址: https://ju.6miu.com/read-13000.html

    最新回复(0)