菜单
本页目录

爬虫步骤

  1. 获取网页内容
  2. 解析网页内容
  3. 储存或分析数据

HTTP请求

  • 请求方法

    • GET方法——获得数据
    • POST方法——创建数据
  • 请求代码

    • # 请求行
      # POST 资源路径+查询参数 请求协议
      POST /user/info HTTP/1.1
      
      # 请求头
      # Host主机域名,完整网址=主机域名+资源路径+查询参数
      # User-Agent客户端
      # Accept接受类型:接受HTML-text/html;接受JSON-application/json;接受HTML和JSON--text/html,application/json;接受任意类型 “ */*
      Host:www.example.com
      User-Agent: curl/7.77.0
      Accept: */*
      
      # 请求体
      {"username":"林粒粒呀”
      "email": "linliliya@hotmail.com"}
      
  • 响应代码

    • # 状态行
      HTTP/1.1 200 0K
      
      #响应头
      Date: Fri,27 Jan 2023 02:10:48 GMT
      Content-Type: text/html; charset=utf-8
      
      #响应体
      <!DOCTYPE html>
      <head><title>首页</title></head>
      <body><h1>林粒粒呀</h1><p>哈喽:</p></body>
      </html>
      
    • #状态码status code含义
      200 OK //客户端请求成功
      301 Moved Permanently // 资源被永久移动到新地址
      400 Bad Request // 客户端不能被服务器所理解
      401 Unauthorized // 请求未经授权
      403 Forbidden // 服务器拒绝提供服务
      404 Not Found // 请求资源不存在
      500 Internal Server Error // 服务器发生不可预期的错误
      503 Server Unavailable //服务器当前不能处理客户端的请求
      

Python Requests库

  • 安装

    • #终端输入
      pip install requests
      
  • 使用

    • import requests
      head = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
      response = requests.get("http://books.toscrape.com/", headers=head)
      print(response)
      print(response.status code)
      
      import requests
      response =requests.get("http://books.toscrape.com/")
      if response.ok:
      	# 获取响应体内容
      	print(response.text)
      else:
      	print("请求失败")
      

HTML

  HTML教程-康文昌[^1]

Beautiful Soup解析库

  • pip install bs4
    
  • from bs4 import BeautifulSoup
    import requests
    content =requests.get("http://ww.example.com/").text
    soup = BeautifulSoup(content,"html.parser")
    
    # 找第一个p标签
    p = soup.p
    print(p)
    
    # 找所有price_color类别的p标签
    all_prices = soup.findAll("p",attrs={"class": "price_color"})
    # 打印所有去掉前置1单位的price
    for price in all_prices
    	print(price.string[1:])
    

实战豆瓣

import requests
from bs4 import BeautifulSoup

headers = {
	"User-Agent": "Mozilla/5.0...
}

for start_num in range(0,250,25):
	response =requests.get(f"https://movie.douban.com/top250?start={start_num}"), headers=headers)
	html = response.text
	soup = BeautifulSoup(html,"html.parser")
	all_titles = soup.findAll("span", attrs={"class": "title"})
	for title in all titles:
		title_string = title.string
		if "/" not in title_string:
			print(title_string)

正则表达式

  复杂啊复杂。。。

多线程threading库

  并没有仔细研究,倒是在pyside做了多线程

动态加载selenium库

  selenium没用过,用的DrissionPage库