ToB企服应用市场:ToB评测及商务社交产业平台

标题: python爬虫基础入门 [打印本页]

作者: 兜兜零元    时间: 2024-7-11 10:52
标题: python爬虫基础入门
步骤

DDoS攻击

通过给服务器发送海量高频请求,大量斲丧网页资源,影响其他用户的请求
服从规则

可以检察该网站的robots.txt文件,了解可爬取的网页路径范围
HTTP(Hypertext Transfer Protocol 超文本传输协议)

实战演示1

  1. import requests
  2. response = requests.get('https://books.toscrape.com/')  # 专门用来练习爬虫的网站
  3. print(response)                # <Response [200]>  # 打印出来的是一个Response对象,包含了请求的响应内容
  4. print(response.status_code, "\n==============================")    # 200  # 打印出响应状态码
  5. # 我们可以用response.text来获取响应内容的文本形式:
  6. print(response.text, "\n==============================")
  7. # 我们也可以用response.content来获取响应内容的字节串形式:
  8. print(response.content, "\n==============================")
  9. # 我们也可以用response.json()来获取响应内容的json形式
  10. # 可以用状态码来判断响应是否成功,也可以用Response对象的ok属性来判断:
  11. if response.ok:
  12.     print('请求成功')
  13. else:
  14.     print('请求失败')
  15. # 我们还可以用response.headers来获取响应头信息,它是一个字典。
  16. # 我们还可以用response.cookies来获取响应的cookie信息,它是一个字典。
  17. # 我们还可以用response.url来获取最终的url,它可能与请求url不同。
  18. # 我们还可以用response.request来获取请求对象,它是一个PreparedRequest对象。
  19. # 我们还可以用response.close()来关闭响应对象,释放资源。
  20. # 我们还可以用requests.post()、requests.put()、requests.delete()等方法来发送POST、PUT、DELETE请求。
  21. # 这些方法的用法和requests.get()类似,只是需要传入不同的参数。
  22. # 例如,requests.post('https://httpbin.org/post', data={'key': 'value'})可以发送一个POST请求,
  23. # 并将参数data作为请求体发送给httpbin.org。
  24. # requests.put('https://httpbin.org/put', data={'key': 'value'})可以发送一个PUT请求,
  25. # 并将参数data作为请求体发送给httpbin.org。
  26. # requests.delete('https://httpbin.org/delete')可以发送一个DELETE请求,
  27. # 并将请求发送给httpbin.org。
  28. # 可以传入headers参数来设置请求头,headers的数据类型是一个字典,例如:
  29. response = requests.get('https://httpbin.org/get', headers={'User-Agent': 'Mozilla/5.0'})
  30. # 这样就可以模拟浏览器发送请求。把爬虫程序伪装成正常浏览器,可以避免被网站识别出来。
复制代码
网页结构(三大技能要素:CSS、HTML、JS)

网页标签实践
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <title>这是我的网页标题</title>
  5.     </head>
  6.     <body>
  7.         <h1>这是一个一级标题</h1>
  8.         <h2>这是一个二级标题</h2>
  9.         <h3>这是一个三级标题</h3>
  10.         <div style="background-color: yellow;">
  11.             <h4>这是一个四级标题</h4>
  12.             <h5>这是一个五级标题</h5>
  13.             <h6>这是一个六级标题</h6>
  14.         </div>
  15.         <h7>这是一个
  16.             <span style="color: red;">错误</span>
  17.             的七级标题,
  18.             <span style="background-color: rgb(12, 106, 12);">浏览器</span>
  19.             不支持,所以会显示为
  20.             <span style="color: blue;">正常的文本</span>
  21.         </h7>
  22.         <p>这是一个文本段落,和上面的七级标题是一样大小的</p>
  23.         <p>
  24.             当该
  25.             html文件
  26.             发生更改(并保存)时,只要<b>浏览器</b>不缓存,就会<u>自动更新</u>显示,不需要<i>手动刷新</i>;<br>但是如果浏览器缓存了该文件,则需要手动刷新才能看到更新后的效果。
  27.         </p>
  28.         <img src="https://p1.ssl.qhmsg.com/t0143b426aee3bb03cb.jpg"  width="300" height="300"><br>
  29.         <a href="https://www.baidu.com" target="_blank">在新窗口打开百度</a><br>
  30.         <a href="https://www.baidu.com">在当前窗口打开百度</a><br>
  31.         <ol>
  32.             <li>第一项</li>
  33.             <li>第二项</li>
  34.             <li>第三项</li>
  35.         </ol>
  36.         <ul>
  37.             <li>第一项</li>
  38.             <li>第二项</li>
  39.             <li>第三项</li>
  40.         </ul>
  41.         <table border="1">
  42.             <tr>
  43.                 <th>姓名</th>
  44.                 <th>性别</th>
  45.                 <th>年龄</th>
  46.             </tr>
  47.             <tr>
  48.                 <td>张三</td>
  49.                 <td>男</td>
  50.                 <td>20</td>
  51.             </tr>
  52.             <tr>
  53.                 <td>女</td>
  54.                 <td>25</td>
  55.             </tr>
  56.             <tr>
  57.                 <td>王五</td>
  58.                 <td>男</td>
  59.                 <td>30</td>
  60.             </tr>
  61.         </table>
  62.         <br>
  63.         <table border="5">
  64.             <thead>
  65.                 <th>姓名</th>
  66.                 <td>性别</td>
  67.                 <td>年龄</td>
  68.             </thead>
  69.             <tbody>
  70.                 <tr>
  71.                     <td>张三</td>
  72.                     <td>男</td>
  73.                     <td>20</td>
  74.                 </tr>
  75.                 <tr>
  76.                     <td>女</td>
  77.                     <td>25</td>
  78.                 </tr>
  79.                 <tr>
  80.                     <td>王五</td>
  81.                     <td>男</td>
  82.                     <td>30</td>
  83.                 </tr>
  84.             </tbody>
  85.         </table>
  86.     </body>
  87. </html>
复制代码


剖析网页结构

用Python第三方库:Beautiful Soup
  1. from bs4 import BeautifulSoup
  2. import requests
  3. url = "http://books.toscrape.com/"
  4. response = requests.get(url)
  5. text = response.text
  6. soup = BeautifulSoup(text, "html.parser")   # 第二个参数是解析器,这里使用html.parser
  7. # print(soup.p)   # 输出第一个<p>标签的内容
  8. # print(soup.find_all("p"))   # 输出所有<p>标签的内容
  9. # print(soup.img)   # 输出第一个<img>标签的内容
  10. # print(soup.find_all("img"))   # 输出所有<img>标签的内容
  11. # 找价格
  12. all_prices = soup.find_all("p", attrs={"class": "price_color"}) # 第二额参数是属性,类型为字典,这里查找所有class为price_color的<p>标签
  13. for price in all_prices:
  14.     print(price)   # 输出所有<p>标签中表示价格的<p>标签
  15.     print(price.text)   # 只输出价格即字符串内容
  16.     print(price.string)   # 等价于上一行,输出价格即字符串内容
  17.     print(price.string[2:])   # 输出价格的数字部分(即索引值从2开始的部分)
  18. # 找书名
  19. all_titles = soup.find_all("h3")   # 查找所有<h3>标签
  20. for title in all_titles:
  21.     all_links = title.find_all("a")   # 在每个<h3>标签中查找所有<a>标签
  22.     for link in all_links:
  23.         print(link.text)   # 输出所有<a>标签中的文本内容,即书名
  24. # 结果
  25. <p class="price_color">£51.77</p>
  26. £51.77
  27. £51.77
  28. 51.77
  29. <p class="price_color">£53.74</p>
  30. £53.74
  31. £53.74
  32. 53.74
  33. <p class="price_color">£50.10</p>
  34. £50.10
  35. £50.10
  36. 50.10
  37. <p class="price_color">£47.82</p>
  38. £47.82
  39. £47.82
  40. 47.82
  41. <p class="price_color">£54.23</p>
  42. £54.23
  43. £54.23
  44. 54.23
  45. <p class="price_color">£22.65</p>
  46. £22.65
  47. £22.65
  48. 22.65
  49. <p class="price_color">£33.34</p>
  50. £33.34
  51. £33.34
  52. 33.34
  53. <p class="price_color">£17.93</p>
  54. £17.93
  55. £17.93
  56. 17.93
  57. <p class="price_color">£22.60</p>
  58. £22.60
  59. £22.60
  60. 22.60
  61. <p class="price_color">£52.15</p>
  62. £52.15
  63. £52.15
  64. 52.15
  65. <p class="price_color">£13.99</p>
  66. £13.99
  67. £13.99
  68. 13.99
  69. <p class="price_color">£20.66</p>
  70. £20.66
  71. £20.66
  72. 20.66
  73. <p class="price_color">£17.46</p>
  74. £17.46
  75. £17.46
  76. 17.46
  77. <p class="price_color">£52.29</p>
  78. £52.29
  79. £52.29
  80. 52.29
  81. <p class="price_color">£35.02</p>
  82. £35.02
  83. £35.02
  84. 35.02
  85. <p class="price_color">£57.25</p>
  86. £57.25
  87. £57.25
  88. 57.25
  89. <p class="price_color">£23.88</p>
  90. £23.88
  91. £23.88
  92. 23.88
  93. <p class="price_color">£37.59</p>
  94. £37.59
  95. £37.59
  96. 37.59
  97. <p class="price_color">£51.33</p>
  98. £51.33
  99. £51.33
  100. 51.33
  101. <p class="price_color">£45.17</p>
  102. £45.17
  103. £45.17
  104. 45.17
  105. A Light in the ...
  106. Tipping the Velvet
  107. Soumission
  108. Sharp Objects
  109. Sapiens: A Brief History ...
  110. The Requiem Red
  111. The Dirty Little Secrets ...
  112. The Coming Woman: A ...
  113. The Boys in the ...
  114. The Black Maria
  115. Starving Hearts (Triangular Trade ...
  116. Shakespeare's Sonnets
  117. Set Me Free
  118. Scott Pilgrim's Precious Little ...
  119. Rip it Up and ...
  120. Our Band Could Be ...
  121. Olio
  122. Mesaerion: The Best Science ...
  123. Libertarianism for Beginners
  124. It's Only the Himalayas
复制代码
爬虫实战(爬豆瓣前250的电影)

  1. import requests
  2. from bs4 import BeautifulSoup
  3. headers = {
  4.     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
  5. }
  6. response = requests.get('https://movie.douban.com/top250', headers=headers)
  7. soup = BeautifulSoup(response.text, 'html.parser')
  8. titles = soup.find_all("span", class_="title")
  9. i = 0
  10. for title in titles:
  11.     # print(title.text)  # 输出电影名(包括原标题)
  12.     if "/" not in title.string:
  13.         i+=1
  14.         print(i, ".", title.string)  # 输出电影名(去除原标题)
  15. print("========================================================================")
  16. # 以上操作只能获得第一页的内容,也即前25部电影的名称。
  17. # 点击到第二页我们会发现,其网址的参数信息变化了,start变成了25,可以以这个为基础,继续请求第二页的内容。
  18. # 我们可以定义一个函数,传入页码,返回该页的电影名称列表,然后再循环调用这个函数,获取所有电影名称。
  19. # 具体的实现方法可以参考如下代码:
  20. # 定义一个函数,传入页码,返回该页的电影名称列表
  21. def get_movie_names(page):
  22.     headers = {
  23.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
  24.     }
  25.     url = 'https://movie.douban.com/top250?start=' + str((page-1)*25)
  26.     response = requests.get(url, headers=headers)
  27.     soup = BeautifulSoup(response.text, 'html.parser')
  28.     titles = soup.find_all("span", class_="title")
  29.     movie_names = []
  30.     for title in titles:
  31.         if "/" not in title.string:
  32.             movie_names.append(title.string)
  33.     return movie_names
  34. # 循环调用这个函数,获取所有电影名称
  35. movie_names = []
  36. for i in range(1, 11):
  37.     movie_names += get_movie_names(i)
  38. # 输出所有电影名称   
  39. # for i, name in enumerate(movie_names):
  40. #     print(i+1, ".", name)
  41. j = 1
  42. for name in movie_names:
  43.     print(j, ".", name)
  44.     j += 1
  45. # 结果如下:
  46. 1 . 肖申克的救赎
  47. 2 . 霸王别姬
  48. 3 . 阿甘正传
  49. 4 . 泰坦尼克号
  50. 5 . 千与千寻
  51. 6 . 这个杀手不太冷
  52. 7 . 美丽人生
  53. 8 . 星际穿越
  54. 9 . 盗梦空间
  55. 10 . 楚门的世界
  56. 11 . 辛德勒的名单
  57. 12 . 忠犬八公的故事
  58. 13 . 海上钢琴师
  59. 14 . 三傻大闹宝莱坞
  60. 15 . 放牛班的春天
  61. 16 . 机器人总动员
  62. 17 . 疯狂动物城
  63. 18 . 无间道
  64. 19 . 控方证人
  65. 20 . 大话西游之大圣娶亲
  66. 21 . 熔炉
  67. 22 . 教父
  68. 23 . 触不可及
  69. 24 . 当幸福来敲门
  70. 25 . 寻梦环游记
  71. ========================================================================
  72. 1 . 肖申克的救赎
  73. 2 . 霸王别姬
  74. 3 . 阿甘正传
  75. 4 . 泰坦尼克号
  76. 5 . 千与千寻
  77. 6 . 这个杀手不太冷
  78. 7 . 美丽人生
  79. 8 . 星际穿越
  80. 9 . 盗梦空间
  81. 10 . 楚门的世界
  82. 11 . 辛德勒的名单
  83. 12 . 忠犬八公的故事
  84. 13 . 海上钢琴师
  85. 14 . 三傻大闹宝莱坞
  86. 15 . 放牛班的春天
  87. 16 . 机器人总动员
  88. 17 . 疯狂动物城
  89. 18 . 无间道
  90. 19 . 控方证人
  91. 20 . 大话西游之大圣娶亲
  92. 21 . 熔炉
  93. 22 . 教父
  94. 23 . 触不可及
  95. 24 . 当幸福来敲门
  96. 25 . 寻梦环游记
  97. 26 . 末代皇帝
  98. 27 . 龙猫
  99. 28 . 怦然心动
  100. 29 . 活着
  101. 30 . 哈利·波特与魔法石
  102. 31 . 蝙蝠侠:黑暗骑士
  103. 32 . 指环王3:王者无敌
  104. 33 . 我不是药神
  105. 34 . 乱世佳人
  106. 35 . 飞屋环游记
  107. 36 . 素媛
  108. 37 . 哈尔的移动城堡
  109. 38 . 十二怒汉
  110. 39 . 让子弹飞
  111. 40 . 何以为家
  112. 41 . 摔跤吧!爸爸
  113. 42 . 海蒂和爷爷
  114. 43 . 猫鼠游戏
  115. 44 . 天空之城
  116. 45 . 鬼子来了
  117. 46 . 少年派的奇幻漂流
  118. 47 . 钢琴家
  119. 48 . 指环王2:双塔奇兵
  120. 49 . 大话西游之月光宝盒
  121. 50 . 闻香识女人
  122. 51 . 死亡诗社
  123. 52 . 绿皮书
  124. 53 . 大闹天宫
  125. 54 . 罗马假日
  126. 55 . 黑客帝国
  127. 56 . 指环王1:护戒使者
  128. 57 . 天堂电影院
  129. 58 . 教父2
  130. 59 . 狮子王
  131. 60 . 辩护人
  132. 61 . 饮食男女
  133. 62 . 搏击俱乐部
  134. 63 . 本杰明·巴顿奇事
  135. 64 . 美丽心灵
  136. 65 . 穿条纹睡衣的男孩
  137. 66 . 窃听风暴
  138. 67 . 情书
  139. 68 . 两杆大烟枪
  140. 69 . 音乐之声
  141. 70 . 西西里的美丽传说
  142. 71 . 看不见的客人
  143. 72 . 哈利·波特与死亡圣器(下)
  144. 73 . 阿凡达
  145. 74 . 拯救大兵瑞恩
  146. 75 . 小鞋子
  147. 76 . 飞越疯人院
  148. 77 . 功夫
  149. 78 . 沉默的羔羊
  150. 79 . 布达佩斯大饭店
  151. 80 . 禁闭岛
  152. 81 . 蝴蝶效应
  153. 82 . 哈利·波特与阿兹卡班的囚徒
  154. 83 . 致命魔术
  155. 84 . 心灵捕手
  156. 85 . 超脱
  157. 86 . 低俗小说
  158. 87 . 摩登时代
  159. 88 . 春光乍泄
  160. 89 . 海豚湾
  161. 90 . 喜剧之王
  162. 91 . 美国往事
  163. 92 . 致命ID
  164. 93 . 杀人回忆
  165. 94 . 哈利·波特与密室
  166. 95 . 红辣椒
  167. 96 . 加勒比海盗
  168. 97 . 一一
  169. 98 . 七宗罪
  170. 99 . 狩猎
  171. 100 . 唐伯虎点秋香
  172. 101 . 7号房的礼物
  173. 102 . 被嫌弃的松子的一生
  174. 103 . 蝙蝠侠:黑暗骑士崛起
  175. 104 . 甜蜜蜜
  176. 105 . 爱在黎明破晓前
  177. 106 . 第六感
  178. 107 . 超能陆战队
  179. 108 . 请以你的名字呼唤我
  180. 109 . 入殓师
  181. 110 . 重庆森林
  182. 111 . 断背山
  183. 112 . 剪刀手爱德华
  184. 113 . 幽灵公主
  185. 114 . 寄生虫
  186. 115 . 爱在日落黄昏时
  187. 116 . 勇敢的心
  188. 117 . 菊次郎的夏天
  189. 118 . 借东西的小人阿莉埃蒂
  190. 119 . 未麻的部屋
  191. 120 . 消失的爱人
  192. 121 . 无人知晓
  193. 122 . 时空恋旅人
  194. 123 . 阳光灿烂的日子
  195. 124 . 完美的世界
  196. 125 . 倩女幽魂
  197. 126 . 天使爱美丽
  198. 127 . 小森林 夏秋篇
  199. 128 . 哈利·波特与火焰杯
  200. 129 . 侧耳倾听
  201. 130 . 驯龙高手
  202. 131 . 茶馆
  203. 132 . 幸福终点站
  204. 133 . 教父3
  205. 134 . 怪兽电力公司
  206. 135 . 一个叫欧维的男人决定去死
  207. 136 . 新世界
  208. 137 . 玩具总动员3
  209. 138 . 傲慢与偏见
  210. 139 . 小森林 冬春篇
  211. 140 . 被解救的姜戈
  212. 141 . 萤火之森
  213. 142 . 釜山行
  214. 143 . 神偷奶爸
  215. 144 . 色,戒
  216. 145 . 头脑特工队
  217. 146 . 九品芝麻官
  218. 147 . 哪吒闹海
  219. 148 . 告白
  220. 149 . 玛丽和马克思
  221. 150 . 喜宴
  222. 151 . 大鱼
  223. 152 . 模仿游戏
  224. 153 . 头号玩家
  225. 154 . 花样年华
  226. 155 . 射雕英雄传之东成西就
  227. 156 . 七武士
  228. 157 . 我是山姆
  229. 158 . 血战钢锯岭
  230. 159 . 惊魂记
  231. 160 . 阳光姐妹淘
  232. 161 . 恐怖直播
  233. 162 . 你的名字。
  234. 163 . 黑客帝国3:矩阵革命
  235. 164 . 三块广告牌
  236. 165 . 电锯惊魂
  237. 166 . 心迷宫
  238. 167 . 达拉斯买家俱乐部
  239. 168 . 疯狂原始人
  240. 169 . 谍影重重3
  241. 170 . 小丑
  242. 171 . 背靠背,脸对脸
  243. 172 . 上帝之城
  244. 173 . 英雄本色
  245. 174 . 心灵奇旅
  246. 175 . 风之谷
  247. 176 . 绿里奇迹
  248. 177 . 爱在午夜降临前
  249. 178 . 海街日记
  250. 179 . 纵横四海
  251. 180 . 卢旺达饭店
  252. 181 . 疯狂的石头
  253. 182 . 2001太空漫游
  254. 183 . 无间道2
  255. 184 . 记忆碎片
  256. 185 . 雨中曲
  257. 186 . 小偷家族
  258. 187 . 无敌破坏王
  259. 188 . 岁月神偷
  260. 189 . 忠犬八公物语
  261. 190 . 荒蛮故事
  262. 191 . 冰川时代
  263. 192 . 牯岭街少年杀人事件
  264. 193 . 爆裂鼓手
  265. 194 . 恐怖游轮
  266. 195 . 东京教父
  267. 196 . 魔女宅急便
  268. 197 . 大佛普拉斯
  269. 198 . 贫民窟的百万富翁
  270. 199 . 遗愿清单
  271. 200 . 东邪西毒
  272. 201 . 末路狂花
  273. 202 . 你看起来好像很好吃
  274. 203 . 可可西里
  275. 204 . 源代码
  276. 205 . 城市之光
  277. 206 . 黑天鹅
  278. 207 . 海边的曼彻斯特
  279. 208 . 疯狂的麦克斯4:狂暴之路
  280. 209 . 波西米亚狂想曲
  281. 210 . 真爱至上
  282. 211 . 雨人
  283. 212 . 青蛇
  284. 213 . 爱乐之城
  285. 214 . 初恋这件小事
  286. 215 . 芙蓉镇
  287. 216 . 终结者2:审判日
  288. 217 . 人工智能
  289. 218 . 虎口脱险
  290. 219 . 恋恋笔记本
  291. 220 . 新龙门客栈
  292. 221 . 无耻混蛋
  293. 222 . 花束般的恋爱
  294. 223 . 罗生门
  295. 224 . 高山下的花环
  296. 225 . 崖上的波妞
  297. 226 . 千钧一发
  298. 227 . 彗星来的那一夜
  299. 228 . 哈利·波特与死亡圣器(上)
  300. 229 . 白日梦想家
  301. 230 . 萤火虫之墓
  302. 231 . 黑客帝国2:重装上阵
  303. 232 . 奇迹男孩
  304. 233 . 火星救援
  305. 234 . 二十二
  306. 235 . 战争之王
  307. 236 . 血钻
  308. 237 . 哈利·波特与凤凰社
  309. 238 . 步履不停
  310. 239 . 千年女优
  311. 240 . 大红灯笼高高挂
  312. 241 . 房间
  313. 242 . 魂断蓝桥
  314. 243 . 谍影重重2
  315. 244 . 蜘蛛侠:平行宇宙
  316. 245 . 弱点
  317. 246 . 谍影重重
  318. 247 . 阿飞正传
  319. 248 . 朗读者
  320. 249 . 隐藏人物
  321. 特与死亡圣器(上)
  322. 229 . 白日梦想家
  323. 230 . 萤火虫之墓
  324. 231 . 黑客帝国2:重装上阵
  325. 232 . 奇迹男孩
  326. 233 . 火星救援
  327. 234 . 二十二
  328. 235 . 战争之王
  329. 236 . 血钻
  330. 237 . 哈利·波特与凤凰社
  331. 238 . 步履不停
  332. 239 . 千年女优
  333. 240 . 大红灯笼高高挂
  334. 241 . 房间
  335. 242 . 魂断蓝桥
  336. 243 . 谍影重重2
  337. 244 . 蜘蛛侠:平行宇宙
  338. 245 . 弱点
  339. 246 . 谍影重重
  340. 247 . 阿飞正传
  341. 248 . 朗读者
  342. 249 . 隐藏人物
  343. 250 . 再次出发之纽约遇见你
复制代码
下一步学习什么



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4