记录一下目前会的爬虫知识

一、Requests 库

安装与导入

安装

pip install requests

导入模块

import requests

方法

请求类型

  1. get
  2. post
  3. put
  4. delete
  5. head
  6. options

示例(get请求)

r = requests.get(
    url="",
    headers={},
    cookies="",
    data={}
)

示例(post请求)

payload = dict(key1='value1', key2='value2')
r = requests.post('https://httpbin.org/post', data=payload)

输入

参数 类型 介绍
url str 网站
params 携带的参数
headers
cookies
timeout 不指定了 timeout 值,requests 不会自动进行超时处理

输出

方法返回为一个类型为Response(requests.Response)的对象

下面是一些常用的方法

apparent_encoding()

自动猜测网页编码

encoding(str)

指定网页编码,需要传入一个字符串参数

text()

返回网页内容

raise_for_status()

网页状态码是4或5开头时(如404),自动抛出异常

content()

以二进制的形式返回网页内容(常用于非文本内容的保存如图片)

保存图片示例

with open('test.png','wb') as f:
   f.write(requests.get(
           url=""
       ))

status_code()

返回网页状态码

二、BeautifulSoup 库

BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历HTML和XML文档的树形结构,并从中提取所需的数据。BeautifulSoup可以处理不规则的标记和嵌套标记,使得数据提取变得更加容易。

官方文档:点击查看

安装与导入

安装

pip install beautifulsoup4

导入

from bs4 import BeautifulSoup

初始化bs4对象

BeautifulSoup()

这样用

soup = BeautifulSoup(
    markup="",
    builder=""
)

参数说明

参数 说明 示例
markup 网页 "str网页内容"open("1.html")requests.get("").text
builder 解析器 html.parserlxml

对象属性的访问与修改

tag的属性操作方法与字典一样

# 示例HTML
soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
# 访问元素
soup.b

<b class="boldest">Extremely bold</b>

# 属性修改与访问
soup.b["class"] = "new_boldest"
soup.b["class"]

['new_boldest']

取出文字

soup.b.text
# 不需要括号

查找元素

1. find()find_all()

标题对应: 返回查找到的元素的第一个 与 返回查找到的元素的列表

例子:

# 查找 标签是p 的元素
soup.find_all("p")
# 查找 标签是p、CSS类名title的元素
soup.find_all("p", "link2")

# 查找 包含id属性 的元素
soup.find_all(id=True)
# 查找 id=link2 的元素
soup.find_all(id="link2")

# 查找 标签是p、id=link2 的元素
soup.find_all("p", id="link2")

2. select_one()和select()

标题对应: 返回查找到的元素的第一个 与 返回查找到的元素的列表

通过在.select() 方法中传入字符串参数, 即可使用CSS选择器的语法查找

例子:

soup.select("p > a:nth-of-type(2)")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

soup.select("p > #link1")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>]

三、lxml 库(Xpath)

lxml是Python中一个非常流行的XML和HTML处理库,它提供了一个XPath解析器,可以使用XPath表达式来查找和提取XML和HTML文档中的数据。

XPath是一种用于在XML和HTML文档中定位元素和属性的语言。XPath表达式可以用于选择文档中的特定元素或属性,或者从文档中提取特定的数据。

安装与导入

安装

pip install lxml

导入

from lxml import etree

初始化XPath解析对象

lxml 支持XPath语法

html=etree.HTML(网页)

通过XPath查找

html.xpath('xpath表达式')

返回的一定是一个列表

如何快速获取XPath表达式:

浏览器开发者工具-元素

右键目标元素 - 复制 - 复制XPath

XPath语法

  1. 选择元素:使用元素名称选择元素,例如:<book> 选择所有 <book> 元素。

  2. 选择属性:使用 @ 符号选择属性,例如:@id 选择所有 id 属性。

  3. 路径表达式:使用 / 符号表示从根节点开始的路径,例如:/bookstore/book 选择所有根节点为 bookstore 的子节点 book

  4. 选择子元素:使用 / 符号选择子元素,例如:bookstore/book/title 选择所有 bookstore 元素下的 book 元素下的 title 元素。

  5. 选择父元素:使用 .. 符号选择父元素,例如:bookstore/book/.. 选择所有 bookstore 元素下的 book 元素的父元素。

  6. 选择当前元素:使用 . 符号选择当前元素,例如:bookstore/book/./title 选择所有 bookstore 元素下的 book 元素下的当前元素 title 元素。

  7. 选择多个元素:使用|符号选择多个元素,例如://book | //cd 选择所有 book cd 元素。

  8. 选择具有特定属性值的元素:使用 [@attribute='value'] 选择具有特定属性值的元素,例如://book[@category='children'] 选择所有 category 属性为 children book 元素。

  9. 选择具有特定文本值的元素:使用 [text()='value'] 选择具有特定文本值的元素,例如://title[text()='Harry Potter'] 选择所有文本值为 Harry Pottertitle 元素。

  10. 选择具有特定位置的元素:使用 [position()='value'] 选择具有特定位置的元素,例如://book[position()=1] 选择第一个 book 元素。

以上由GPT生成

四、Scrapy

Scrapy是一个用于爬取网站数据的Python框架。它提供了一种简单而强大的方式来定义爬取网站的方式,并且可以自动化地处理从网站中提取的数据。Scrapy框架包括了一些核心组件,如爬虫引擎、调度器、下载器、管道等,这些组件可以协同工作,使得爬虫的开发和维护变得更加容易。

安装与准备

安装

pip install scrapy

验证是否安装成功

在终端输入scrapy,结果如下

> scrapy
Scrapy 2.11.0 - no active project

Usage:
  scrapy <command> [options] [args]

Available commands:
  bench         Run quick benchmark test
  fetch         Fetch a URL using the Scrapy downloader
  genspider     Generate new spider using pre-defined templates
  runspider     Run a self-contained spider (without creating a project)
  settings      Get settings values
  shell         Interactive scraping console
  startproject  Create new project
  version       Print Scrapy version
  view          Open URL in browser, as seen by Scrapy

  [ more ]      More commands available when run from project directory

Use "scrapy <command> -h" to see more info about a command

基本命令

命令 说明 示例
startproject 创建一个scrapy项目 scrapy startproject myproject
genspider 创建一个爬虫(在项目下) scrapy genspider myspider example.com(目标网址)
runspider 运行这个爬虫 scrapy runspider myspider.py

其他

学习scrapy没什么意思,用处也不大,更多是作为教学工具,我就不往下写了

五、Selenium

Selenium是一个用于自动化Web应用程序测试的强大工具。它提供了一个用于模拟用户在浏览器中操作的框架,可以用于测试Web应用程序的功能性和性能。

导入包

pip install selenium

下载浏览器驱动

edge https://msedgewebdriverstorage.z22.web.core.windows.net
Chrome https://chromedriver.storage.googleapis.com/index.html
Firefox https://github.com/mozilla/geckodriver/releases
Opera https://github.com/operasoftware/operachromiumdriver/releases

下载符合自己浏览器的驱动(360搜狗什么国产浏览器就不要爬了)

驱动配置

两种方式选择其一

  1. 添加到系统的Path目录

  2. 在python代码中声明驱动路径

    webdriver.Chrome(executable_path='驱动目录')
    

待写。。。