今天通过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协议建议但非约束性,不遵守可能存在法律风险

爬取网页的通用代码框架

  1. #爬取网页的通用代码框架
  2. import requests
  3. def getHTMLText(url):
  4. try:
  5. r=requests.get(url,timeout=30)
  6. r.raise_for_status()
  7. r.encoding=r.apparent_encoding
  8. return r.text
  9. except:
  10. return "产生异常"
  11.  
  12. if __name__=="__main__":
  13. url="http://www.baidu.com"
  14. print(getHTMLText(url))

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

  1. #京东商品页面爬取
  2. import requests
  3. r=requests.get('https://item.jd.com/100000287117.html')
  4. try:
  5. print(r.status_code)
  6. print(r.encoding)
  7. print(r.text[:1000])
  8. except:
  9. print("爬取失败!")

亚马逊商品页面的爬取,与京东类似,但增加了对headers的限制。

  1. #亚马逊商品页面爬取
  2. import requests
  3. url='https://www.amazon.cn/dp/B01LX4GONW/ref=Oct_DLandingS_rdp_4e4570f3'
  4. try:
  5. kv = {'user-agent': 'Mozilla/5.0'}
  6. r = requests.get(url, headers=kv)
  7. print(r.request.headers) #查看当前访问的headers
  8. print(r.status_code) #查看是否错误
  9. print(r.encoding) #查看可能编码
  10. r.encoding=r.apparent_encoding #将编码转换为所提取内容分析过的编码
  11. print(r.text) #提取字符
  12. except:
  13. print("爬取失败")

百度360搜索关键词,需要安全验证。

  1. import requests
  2. kv={'wd':'Python'}
  3. try:
  4. r=requests.get("http://www.baidu.com/s",params=kv)
  5. print(r.status_code) #查看是出错
  6. print(r.encoding)
  7. r.encoding=r.apparent_encoding
  8. print(r.request.url) #查看完整ur
  9. print(len(r.text)) #查看查询结果条目数
  10. print(r.text)
  11. except:
  12. print("爬取错误!")

爬取图片:

  1. import requests
  2. import os
  3. url="http://image.ngchina.com.cn/2020/0203/20200203014405762.jpg"
  4. root="D://pics//"
  5. path=root+url.split('/')[-1]
  6. try:
  7. if not os.path.exists(root):
  8. os.mkdir(root)
  9. if not os.path.exists(path):
  10. r = requests.get(url)
  11. print(r.status_code) # 检测错误
  12. with open(path,'wb') as f:
  13. f.write(r.content)
  14. f.close()
  15. print("图片保存成功")
  16. else:
  17. print("图片已存在!")
  18. except:
  19. print("爬取出错!")

ip地址归属地的自助查询

  1. import requests
  2. url="http://m.ip138.com/ip.asp?ip="
  3. try:
  4. r = requests.get(url + '202.204.80.112')
  5. print(r.status_code)
  6. print(r.text[-500:])
  7. except:
  8. print("爬取失败!")

BeautifulSoup类的基本元素

Tag 标签,最基本的信息组织单元,分别是<>和</>标明开头和结尾

Name 标签的名字,<p>...</p>的名字是‘p’格式<tag>.name

Attributes 标签的属性,字典形式组织,格式<tag>.attrs

NavigableString 标签内非属性字符串,<>,...</>中字符串 格式<tag>.string

Comment 标签内字符串的注释部分,一种特殊的Comment类型

  1. import requests
  2. from bs4 import BeautifulSoup
  3. r=requests.get("http://python123.io/ws/demo.html")
  4. #print(r.text)
  5. demo=r.text
  6. soup=BeautifulSoup(demo,"html.parser") #解析为Beautifulsoup可以理解的汤
  7. print(soup.title) #打印title
  8. #print(soup.prettify())
  9.  
  10. #标签的内容
  11. tag=soup.a #返回第一个标签内容
  12. print(tag)
  13. print(type(tag))
  14.  
  15. #标签的名字
  16. print(soup.a.name)#a标签的名字
  17. print(soup.a.parent.name)#a标签父亲的名字
  18. print(soup.a.parent.parent.name) #a标签的父亲的父亲的名字
  19. print(type(soup.a.name))
  20.  
  21. #标签的属性
  22. print(tag.attrs) #a标签的属性
  23. print(tag.attrs['class'])#a标签class属性
  24. print(tag.attrs['href'])#a标签href属性的值
  25. print(type(tag.attrs))
  26.  
  27. #标签内部内容
  28. print(soup.a.string)
  29. print(soup.p.string)
  30. print(type(soup.p.string))
  1. 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的更多相关文章

  1. 学习分享--python网络爬虫(一)关于如何更新python pip以及如何安装python requests库

    一.python pip的更新(我的是window10 界面可能不太一样)    1.找到电脑左下角开始按钮,并点击: 2.输入cmd 3.打开以后,先查看自己的pip版本  输入:pip -V 敲回 ...

  2. 一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取

    前几天小编给大家分享了数据可视化分析,在文尾提及了网易云音乐歌词爬取,今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌 ...

  3. 一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接

    [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...

  4. 手把手教你用Python网络爬虫获取网易云音乐歌曲

    前天给大家分享了用Python网络爬虫爬取了网易云歌词,在文尾说要爬取网易云歌曲,今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将 ...

  5. 利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

    相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10-20 ...

  6. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  7. 第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进 ...

  8. 第三次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 第一周 Requests库的爬 ...

  9. Python网络爬虫学习总结

    1.检查robots.txt 让爬虫了解爬取该网站时存在哪些限制. 最小化爬虫被封禁的可能,而且还能发现和网站结构相关的线索. 2.检查网站地图(robots.txt文件中发现的Sitemap文件) ...

随机推荐

  1. js将已有数组重新分组(将数组每10项分成一组)

    项目中碰到的一个小需求:分页请求数据,一次请求60条,需要将后台返回的数组每10条分成一组渲染一个表格(表格使用的是ant-design-vue的table) 实现逻辑: var chunk = 10 ...

  2. android 华为、魅族手机无法打印 Log 日志的问题

    最近使用魅族真机测试 App 时,发现 LogCat 不显示项目工程中通过Log.d()和Log.v()打印的 debug 和 verbose 级别的日志,甚是奇怪,通过 debug 模式断点调试也没 ...

  3. DK1.5-JDK11各个新特性

    摘要: 参考文献: https://blog.csdn.net/lsxf_xin/article/details/79712537 JDK各个版本的新特性 要了解一门语言,最好的方式就是要能从基础的版 ...

  4. 在C#下使用TensorFlow.NET训练自己的数据集

    在C#下使用TensorFlow.NET训练自己的数据集 今天,我结合代码来详细介绍如何使用 SciSharp STACK 的 TensorFlow.NET 来训练CNN模型,该模型主要实现 图像的分 ...

  5. jdk8中接口中的特性

    jdk8中可以定义静态方法(public static)和默认方法(public default),public 可以省略 调用接口中的静态方法时:只能通过接口本身来调用,不能被该接口的实现类来调 调 ...

  6. P3945 | 三体问题 (天体物理+计算几何)

    最近终于把<三体Ⅰ·地球往事>和<三体Ⅱ·黑暗森林>看完了! 为了快点认识题目中的歌者文明,已经开始第三部了! 题目背景 @FirstLight0521 出题人在这里哦~ 三体 ...

  7. USB-Blaster CPLD FPGA Intel 驱动安装不上的问题,文件的哈希值不在指定的目录文件中,的解决办法,其实很简单

    intel的官网的驱动安装文档: https://www.intel.com/content/www/us/en/programmable/support/support-resources/down ...

  8. 有多少人在面试时,被Java 如何线程间通讯,问哭了?

    正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点: thread.join(), object. ...

  9. C# WPF之Material Design自定义颜色

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. C# WPF之Material Design自定义颜色 阅读导航 本文背景 代码实现 本文参考 ...

  10. C# 如何获取日期时间各种方法

    我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2019-01-09).时间(16:02:12).日期+时间(2019-01-09 16 ...