爬取网页数据的Python爬虫代码大全

引言

随着互联网的发展,大量的数据被放置在各种网页上。如果需要将这些数据进行分析、处理或存储,手动在网页上复制粘贴将是一个耗时且容易出错的工作。为了解决这个问题,我们可以使用Python编写爬虫程序来自动化这个过程。本文将介绍Python爬虫的基本原理,以及一些常用的爬虫库和代码示例。

Python爬虫的基本原理

Python爬虫的基本原理可以概括为以下几个步骤:

  1. 发送HTTP请求:爬虫程序通过发送HTTP请求,向目标网页请求数据。可以使用Python的requests库来发送GET或POST请求。

    import requests
    
    response = requests.get(url)
    
  2. 解析HTML:获取到网页的响应后,爬虫程序需要对HTML进行解析,提取出我们需要的数据。可以使用Python的beautifulsoup4库来解析HTML。

    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(response.text, 'html.parser')
    
  3. 提取数据:通过解析HTML,我们可以使用各种方式提取出我们需要的数据。可以使用CSS选择器或XPath来选择特定的元素。

    # 使用CSS选择器提取标题和链接
    titles = soup.select('.title')
    links = soup.select('.link')
    
  4. 存储数据:将提取到的数据进行存储,可以使用各种方式,例如存储到数据库、写入CSV文件或导入到Excel等。

    import csv
    
    with open('data.csv', 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(['Title', 'Link'])
        for title, link in zip(titles, links):
            writer.writerow([title.text, link['href']])
    

常用的Python爬虫库

在Python中,有许多优秀的爬虫库可以帮助我们编写爬虫程序。下面介绍几个常用的爬虫库,并给出相应的代码示例。

1. requests

requests是一个简洁而强大的HTTP库,可以用来发送HTTP请求,获取网页的响应。

import requests

response = requests.get(url)

2. beautifulsoup4

beautifulsoup4是一个用于解析HTML和XML的库,提供了简单而灵活的API。

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')

3. scrapy

scrapy是一个高效而灵活的爬虫框架,可以用来快速开发爬虫程序,支持多线程和分布式爬取。

import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'
    
    def start_requests(self):
        yield scrapy.Request(url, callback=self.parse)
        
    def parse(self, response):
        # 解析HTML并提取数据的逻辑
        pass

4. selenium

selenium是一个自动化测试工具,也可以用来爬取需要使用JavaScript渲染的网页。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get(url)

代码示例

下面是一个简单的爬取豆瓣电影Top250的代码示例:

import requests
from bs4 import BeautifulSoup

def get_movies():
    url = '
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    movies = soup.select('.grid_view li')
    for movie in movies:
        title = movie.select('.title')[0].text
        link = movie.select('a')[0]['href']
        print(title, link)

if __name__ == '__main__':
    get_movies()

以上代码通过发送HTTP请求获取豆瓣电影Top250的网页内容,然后使用CSS选择器提取出电影的标题和链接,并打印输出。

序列图

下面是一个使用mermaid语法标识的爬虫程序的序列图示例:

sequenceDiagram
    participant 爬虫程序
    participant 目