方案均来自互联网开源分析,爬虫请遵守网站的robots.txt协议,请勿非法爬虫!

目录

一、基础请求库方式

1. Requests

2. Requests + lxml

3. Requests + BeautifulSoup

4. Reuqests + re(正则表达式库)

二、动态网页处理方式

1. Selenium

三、高效爬虫框架

1. Scrpy

四、其他实用技术

1、PyQuery(jQuery风格解析)

2、API直接调用(结构化数据)

3、异步库(aiohttp + asyncio)


一、基础请求库方式

场景:静态网页、结构简单的动态渲染页面。

1. Requests

原理:Requests发送HTTP请求获取网页源码。

import requests

url = 'https://www.baidu.com'
response = requests.get(url)
print(response.status_code)

2. Requests + lxml

原理:Requests发送HTTP请求获取网页源码,lxml支持HTML和XML的解析,支持XPath解析方式,解析效率非常高。

import requests
from lxml import etree

url = 'https://www.baidu.com'
response = requests.get(url)
html = etree.HTML(response.text)
complete_html = etree.tostring(html, encoding="unicode", method="html")
print(complete_html)

3. Requests + BeautifulSoup

原理:Requests发送HTTP请求获取网页源码,BeautifulSoup解析HTML结构提取数据。

import requests
from bs4 import BeautifulSoup

# 发送请求
url = 'https://www.baidu.com'
response = requests.get(url)

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

# 提取所有a标签的链接
links = soup.find_all('a')
for link in links:
    print(link.get('href'))

4. Reuqests + re(正则表达式库)

原理:Requests发送HTTP请求获取网页源码,灵活匹配特定格式数据(如邮箱、电话)

import re
import requests

url = "https://xxxxx.com"
html = requests.get(url).text
emails = re.findall(r'[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}', html, re.I)
print(emails)

二、动态网页处理方式

1. Selenium

原理:模拟浏览器操作(点击、输入),获取JS渲染后的完整DOM。

场景:Ajax加载、登录验证、复杂交互页面。

from selenium import webdriver
from selenium.webdriver.common.by import By

# 初始化浏览器对象
driver = webdriver.Chrome() 

# 请求url地址
url = 'https://example.com'
driver.get(url)

# 获取动态加载的内容
data_list = driver.find_elements(By.CLASS_NAME, '.el-list')
for data in data_List:
    print(data)

# 关闭浏览器
driver.quit()

三、高效爬虫框架

1. Scrpy

原理:异步处理+中间件扩展,内置调度器、管道存储。

场景:大规模数据抓取、分布式爬虫。

# 安装与创建项目
pip install scrapy
scrapy startproject myproject

# 项目结构
scrapy.cfg:scrapy 项目配置文件,其内定义了项目的配置文件路径、部署相关信息等内容 。
items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里 。
pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。
settings.py:它定义项目的全局配置。
middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。
spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。

# 创建spider
scrapy genspider myspider www.xxx.com

# 运行spider
scrapy crawl myspider

# 输出spider
scrapy crawl myspider -o myspider.csv
# 支持多种输出格式
crapy crawl myspider -o myspider.json
scrapy crawl myspider -o myspider.xml 
scrapy crawl myspider -o myspider.pickle 
scrapy crawl myspider -o myspider.marshal 
scrapy crawl myspider -o ftp://user:pass@ftp.example.com/path/to/myspider.csv
import scrapy

class MySpider(scrapy.Spider):
    name = 'example'
    start_urls = ['https://example.com']

    def parse(self, response):
        yield {
            'title': response.css('h1::text').get(),
            'url': response.url
        }

四、其他实用技术

1、PyQuery(jQuery风格解析)

特点:语法简洁,适合前端开发者。

from pyquery import PyQuery as pq
import requests

doc = pq(requests.get("https://example.com").text)
items = doc('.item').items()
for item in items:
    print(item.find('a').attr('href'))

2、API直接调用(结构化数据)

特点:高效获取JSON/XML数据,需API权限。

import requests

url = "https://api.douban.com/v2/movie/top250"
params = {"start": 0, "count": 20}
response = requests.get(url, params=params).json()
for movie in response['subjects']:
    print(movie['title'], movie['rating']['average'])

3、异步库(aiohttp + asyncio)

原理:协程并发请求,避免阻塞I/O。

场景:高并发爬取API或独立页面。

     import aiohttp
     import asyncio

     async def fetch(url):
         async with aiohttp.ClientSession() as session:
             async with session.get(url) as response:
                 return await response.text()

     urls = ["https://api.example.com/data1", "https://api.example.com/data2"]
     tasks = [fetch(url) for url in urls]
     pages = await asyncio.gather(*tasks)

❤如果文章对您有帮助,您的点赞就是我最大的动力❤

Logo

更多推荐