匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

一篇教程,让你从Python基础到高级爬虫

一篇教程,让你从Python基础到高级爬虫

Python,作为一门通用编程语言,自然不会缺少网络编程的支持。与Java和C++相比,Python更易于上手,使得它成为爬虫领域的大热门。本篇教程将带你了解Python的基础知识,并教你如何使用Python进行高级爬虫。

前置知识

在学习本教程之前,你需要了解基础的Python语法和命令行工具的使用方法,如pip安装工具。如果你已经掌握了这些知识,那么就可以开始了。

第一步:基础爬虫

我们先从最基础的爬虫开始,以爬取豆瓣电影为例。请先安装以下需要用到的库:

```
pip install requests
pip install beautifulsoup4
```

首先,我们需要了解爬虫的基本流程。爬虫的过程是先通过网络获取一个网页的内容,再从网页中获取我们所需要的信息。这个过程通常分为以下几个步骤:

1. 发送HTTP请求,获取网页内容。
2. 解析HTML代码,提取出所需信息。
3. 存储信息。

代码如下:

```python
import requests
from bs4 import BeautifulSoup

url = 'https://movie.douban.com/top250'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

film_list = soup.find('ol', class_='grid_view')
for film in film_list.find_all('li'):
    rank = film.find('em').text
    title = film.find('span', class_='title').text
    rating = film.find('span', class_='rating_num').text
    print(rank, title, rating)
```

以上代码首先定义了目标网址和请求头,通过requests库发起HTTP请求,然后用BeautifulSoup解析HTML代码。接着通过遍历所有电影条目,并从中提取排名、电影名、评分,并输出到控制台。

第二步:反爬虫

在实际的爬虫过程中,网站通常会设置一些反爬虫机制,以尽量防止被恶意爬虫爬取。例如:

- 检查用户IP地址。
- 检查请求头中的User-Agent信息是否合法。
- 检查请求频率是否过高。

为了应对这些反爬虫机制,我们需要在代码中加入一些处理逻辑。以下是一些常用方法:

1. 设置headers,模拟浏览器访问。
2. 随机生成User-Agent。
3. 使用代理IP访问。
4. 使用时间间隔控制访问频率。

代码如下:

```python
import requests
from bs4 import BeautifulSoup
import random
import time

def get_user_agent():
    user_agent_list = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0',
        'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'
    ]
    return random.choice(user_agent_list)

def request_site(url):
    headers = {'User-Agent': get_user_agent()}
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    else:
        return None

def spider_douban():
    url = 'https://movie.douban.com/top250'
    for i in range(10):
        html = request_site(url)
        soup = BeautifulSoup(html, 'html.parser')
        film_list = soup.find('ol', class_='grid_view')
        for film in film_list.find_all('li'):
            rank = film.find('em').text
            title = film.find('span', class_='title').text
            rating = film.find('span', class_='rating_num').text
            print(rank, title, rating)
        time.sleep(random.randint(1,3))

if __name__ == '__main__':
    spider_douban()
```

以上代码中,我们定义了一个get_user_agent函数,随机生成User-Agent信息。request_site函数可以自动处理请求失败的情况。spider_douban函数则是一个完整的爬虫流程,加入了时间间隔控制,以防止请求频率过高引发反爬虫机制。

第三步:高级爬虫

有时候,我们需要通过爬虫获取一些特殊的信息。例如,我们需要通过爬虫获取一个网站的所有链接,或者爬取一个网站上的所有图片。以下是一些高级爬虫的案例。

1. 获取所有链接

```python
import requests
from bs4 import BeautifulSoup
import re

url = "https://www.example.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

links = []
for link in soup.find_all("a"):
    href = link.get("href")
    if href and re.match(r"^https?://", href):
        links.append(href)
```

以上代码通过遍历所有a标签,获取href属性,筛选出所有http或https开头的链接,并存储在links列表中。

2. 爬取图片

```python
import requests
from bs4 import BeautifulSoup
import os

url = 'https://www.example.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

img_dir = 'images'
if not os.path.exists(img_dir):
    os.makedirs(img_dir)
    
imgs = soup.find_all('img')
for img in imgs:
    src = img.get('src')
    if src.startswith('http'):
        response = requests.get(src)
        with open(os.path.join(img_dir, os.path.basename(src)), 'wb') as f:
            f.write(response.content)
```

以上代码可以从网站上爬取所有的图片,并保存到本地文件夹中。我们首先获取所有的img标签,然后遍历每个标签,通过获取src属性获取图片链接,并使用requests库下载图片内容。

总结

通过本教程,你已经了解了Python的基础知识和一个完整的爬虫流程。同时,你还学习了如何处理反爬虫机制和实现一些高级爬虫功能。祝你在Python的世界里愉快地编程!