0


Selenium 爬虫

1. 使用 Selenium 处理 JavaScript 渲染

一些网站通过 JavaScript 动态加载内容,这时普通的请求库无法抓取完整数据。通过 Selenium 这样的浏览器自动化工具,可以抓取这些网站的内容。

示例代码:

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.service import Service
  3. from webdriver_manager.chrome import ChromeDriverManager
  4. from selenium.webdriver.common.by import By
  5. import time
  6. # 设置 Chrome 浏览器
  7. driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
  8. # 打开目标网址
  9. driver.get('https://example.com')
  10. # 等待页面加载完成
  11. time.sleep(5)
  12. # 提取 JavaScript 动态加载的内容
  13. element = driver.find_element(By.CSS_SELECTOR, '.dynamic-content')
  14. print(element.text)
  15. # 关闭浏览器
  16. driver.quit()

2. 使用

  1. Scrapy

框架进行分布式爬取

  1. Scrapy

是一个强大的爬虫框架,适用于大型项目,支持高效抓取并行化、自动处理请求错误,还可以轻松扩展成分布式爬虫。

Scrapy 基本架构:

  1. scrapy startproject myproject

Scrapy 示例代码:

  1. import scrapy
  2. class QuotesSpider(scrapy.Spider):
  3. name = "quotes"
  4. def start_requests(self):
  5. urls = ['http://quotes.toscrape.com/page/1/', 'http://quotes.toscrape.com/page/2/']
  6. for url in urls:
  7. yield scrapy.Request(url=url, callback=self.parse)
  8. def parse(self, response):
  9. for quote in response.css('div.quote'):
  10. yield {
  11. 'text': quote.css('span.text::text').get(),
  12. 'author': quote.css('small.author::text').get(),
  13. }
  14. # 运行: scrapy crawl quotes

3. 使用代理和用户代理轮换防止被封

高端爬虫的一个常见问题是反爬虫机制,如 IP 封锁或用户代理识别。可以通过使用代理池和随机用户代理来避免这些问题。

**使用

  1. fake_useragent

随机用户代理:**

  1. pip install fake_useragent

示例代码:

  1. import requests
  2. from fake_useragent import UserAgent
  3. # 使用随机用户代理
  4. ua = UserAgent()
  5. headers = {'User-Agent': ua.random}
  6. response = requests.get('https://httpbin.org/headers', headers=headers)
  7. print(response.text)

代理池示例:

  1. proxies = {
  2. 'http': 'http://username:password@proxyserver:port',
  3. 'https': 'https://username:password@proxyserver:port',
  4. }
  5. response = requests.get('https://example.com', proxies=proxies)

4. 爬取大型数据:队列与分布式

对于大规模爬取,可以使用

  1. Redis

这样的队列系统,实现分布式的任务分发和管理。

**示例:使用

  1. Redis

作为任务队列**

  1. pip install scrapy-redis

  1. settings.py

中:

  1. SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  2. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

这样可以在多个机器上运行爬虫,自动去重和分发任务。

5. 处理网页验证码与登陆认证

一些网站通过验证码或登陆页面进行限制。这时可以借助

  1. 2Captcha

  1. AntiCaptcha

等 API 服务自动处理验证码,并使用 Selenium 或 Requests+Session 进行自动化登陆。

处理验证码的流程:

  1. 捕获验证码图片
  2. 发送到 2Captcha 或 AntiCaptcha API
  3. 解析验证码,输入并提交

验证码处理代码示例:

  1. import requests
  2. captcha_image = 'captcha_image_url'
  3. api_key = 'your_2captcha_api_key'
  4. captcha_id = requests.post('http://2captcha.com/in.php', data={'key': api_key, 'method': 'base64', 'body': captcha_image}).text
  5. captcha_solution = requests.get(f'http://2captcha.com/res.php?key={api_key}&action=get&id={captcha_id}').text

本文转载自: https://blog.csdn.net/qq_52030218/article/details/142861337
版权归原作者 来吧~ 所有, 如有侵权,请联系我们删除。

“Selenium 爬虫”的评论:

还没有评论