爬取网页数据的Python爬虫代码大全
引言
随着互联网的发展,大量的数据被放置在各种网页上。如果需要将这些数据进行分析、处理或存储,手动在网页上复制粘贴将是一个耗时且容易出错的工作。为了解决这个问题,我们可以使用Python编写爬虫程序来自动化这个过程。本文将介绍Python爬虫的基本原理,以及一些常用的爬虫库和代码示例。
Python爬虫的基本原理
Python爬虫的基本原理可以概括为以下几个步骤:
-
发送HTTP请求:爬虫程序通过发送HTTP请求,向目标网页请求数据。可以使用Python的
requests
库来发送GET或POST请求。import requests response = requests.get(url)
-
解析HTML:获取到网页的响应后,爬虫程序需要对HTML进行解析,提取出我们需要的数据。可以使用Python的
beautifulsoup4
库来解析HTML。from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser')
-
提取数据:通过解析HTML,我们可以使用各种方式提取出我们需要的数据。可以使用CSS选择器或XPath来选择特定的元素。
# 使用CSS选择器提取标题和链接 titles = soup.select('.title') links = soup.select('.link')
-
存储数据:将提取到的数据进行存储,可以使用各种方式,例如存储到数据库、写入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 目