爬虫

定义

爬虫是一种自动化程序,通过模拟浏览器行为或直接访问网站的接口,从网页中提取有用信息的程序

作用

用于从大量网页中收集数据,例如商品价格、股票行情、新闻、社交媒体信息等等

流程

  1. 了解目标网站:在开始爬取之前,需要对目标网站进行了解,包括目标网站的 URL 结构、HTML/CSS/JavaScript 的代码结构等等。

  2. 发送 HTTP 请求:Python 爬虫使用 requests 库向目标网站发送 HTTP 请求,获取网页的 HTML 源码。

  3. 解析 HTML:使用 Beautiful Soup 或 lxml 等库对 HTML 源码进行解析,提取需要的信息,例如标题、摘要、正文、图片链接等等。

  4. 存储数据:将爬取到的数据存储到数据库、文件或者内存中,方便后续的分析和使用。

  5. 定期更新:定期更新爬取的数据,保证数据的及时性和准确性。

范例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from bs4 import BeautifulSoup
import requests

# 发送 HTTP 请求
url = 'http://www.example.com'
response = requests.get(url)

# 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')
title = soup.title.string

# 输出页面标题
print(title)

常用工具

BeautifulSoup

参数

css选择器

定义

用于选择 HTML 或 XML 文档中某个或某些元素的模式

分类

  • 标签选择器:通过元素的标签名进行选择,如 p 选择所有 <p> 元素。

  • 类选择器:通过元素的class 属性值进行选择,如 .class-name 选择所有 class 属性值为 class-name 的元素

  • id 选择器:通过元素的 id 属性值进行选择,如 #id-name 选择 id 属性值为 id-name 的元素。

  • 属性选择器:通过元素的属性值进行选择,如 [attribute=value] 选择所有具有 attribute 属性,且属性值为 value 的元素。

  • 后代选择器:通过元素的父子关系进行选择,如 div p 选择所有 <p> 元素,其父元素为 <div>。

  • 子选择器:通过元素的父子关系进行选择,但只选择直接子元素,如 div > p 选择所有 <p> 元素,其父元素为 <div>。

  • 通配符选择器:选择所有元素,如 * 选择所有元素。

防反爬虫

  1. 降低爬虫程序的访问频率,避免短时间内对网站的过多访问。

  2. 通过设置 User-Agent、Referer、Cookie 等 HTTP 头部信息,模拟浏览器的访问行为,避免被识别为爬虫程序。

  3. 使用代理 IP,避免单一 IP 大量访问同一个网站而被封禁。

  4. 避免同时进行大量并发访问,采用异步请求或者分布式爬虫等技术来分散访问压力。

  5. 遵守网站的 robots.txt 规则,避免访问被禁止的页面和内容。

  6. 添加延时和随机性

1
2
3
# 随机生成一个 1-3 秒的延时
delay = random.uniform(1, 3)
time.sleep(delay)
  1. 使用验证码识别库
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import requests
import pytesseract
from PIL import Image

response = requests.get(url)

# 将验证码图片保存到本地
with open('captcha.jpg', 'wb') as f:
    f.write(response.content)

# 使用 pytesseract 对验证码图片进行识别
image = Image.open('captcha.jpg')
captcha = pytesseract.image_to_string(image)
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy