Python 爬虫架构原理与汽车之家图片爬取实战
Python 爬虫通过发送 HTTP 请求获取网页源代码并解析提取数据。核心架构包含调度器、URL 管理器、下载器、解析器和存储器。编写爬虫主要涉及发送请求和解析 HTML 两步。为应对反爬机制,常需配置 IP 代理。本文阐述了爬虫设计思路,并通过新浪新闻文本抓取和汽车之家图片下载两个实例,演示了使用 requests、BeautifulSoup 及 Scrapy 框架的具体代码实现,涵盖 URL 管理、HTML 解析、翻页处理及文件存储流程。

Python 爬虫通过发送 HTTP 请求获取网页源代码并解析提取数据。核心架构包含调度器、URL 管理器、下载器、解析器和存储器。编写爬虫主要涉及发送请求和解析 HTML 两步。为应对反爬机制,常需配置 IP 代理。本文阐述了爬虫设计思路,并通过新浪新闻文本抓取和汽车之家图片下载两个实例,演示了使用 requests、BeautifulSoup 及 Scrapy 框架的具体代码实现,涵盖 URL 管理、HTML 解析、翻页处理及文件存储流程。

(1)爬虫调度器主要配合调用其他四个模块。所谓调度,就是调用其他模板。
(2)URL 管理器负责管理 URL 链接。URL 链接分为爬行链接和未爬行链接,需要 URL 管理器来管理。同时,它还为获取新的 URL 链接提供了接口。
(3)HTML 下载器是下载要抓取的页面的 HTML。
(4)HTML 解析器是从 HTML 源代码中获取爬行的数据,同时向 URL 管理器发送新的 URL 链接,并向数据存储器发送处理后的数据。
(5)数据存储器是将 HTML 下载器发送的数据存储在本地。
在编写 Python 爬虫程序时,只需要做以下两件事:
使用 Python 爬虫时,经常会遇到有反爬机制的网站。我们可以通过伪装 headers 爬行,但网站仍然可以获得您的 IP,从而禁止您的 IP 爬行信息。
Python 爬虫是最方便快捷获取数据的方法,不过很多小伙伴还没有切实地感受过。爬行数据基本上通过网页 URL 获得该网页的源代码,根据源代码筛选必要的信息。
requests 可以很方便地让我们得到网页的源代码,同时 lxml 能够很快来筛选出我们所需要的信息。
import requests
html = requests.get("https://coder-lida.github.io/")
print(html.text)
为其他程序提供数据源,如搜索引擎 (百度、Google 等)、数据分析、大数据等等。
(1)首先确定需要爬取的网页 URL 地址;
(2)通过 HTTP 协议来获取对应的 HTML 页面;
(3)提取 html 页面里的有用数据;
(4)如果是需要的数据就保存起来,如果是其他的 URL,那么就执行第二步。
(1)确定爬取网页内容的网络地址
(2)实施爬虫代码
import requests
from bs4 import BeautifulSoup
res = requests.get('https://k.sina.com.cn/article_6192937794_17120bb42020015u42.html?from=health')
res.encoding = 'utf-8'
soup = BeautifulSoup(res.text, 'html.parser')
title = soup.select('#artibody')[0].text
print(title)
以上就是 Python 爬虫爬取网页新闻内容的简单实现。
现在很多网站对异常用户访问网站频次过高设置了安全访问机制。在这个时候,如果你想继续访问这个网站,HTTP 代理 IP 非常重要。
当前 IP 地址有限,可以更改新的 IP 地址,保证爬虫的顺利进行。
随着生活水平的提高和快节奏生活的发展,汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适、喜欢车辆的前提。例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽车网站。
在做爬虫的过程中,如果你爬取的频率过快,不符合人的操作模式。有些网站的反爬虫机制通过监测到你的 IP 异常,访问频率过高。就会对你进行封 IP 处理。目前已有比较多的第三方平台专门进行代理 IP 的服务。
# pipelines 管道代码
from urllib import request
import os
class VehicleHomePipeline:
def process_item(self, item, spider):
pic_url = item['pic_url']
# 得到图片名字
pic_name = pic_url.split('__')[-1] # 得到 xxx.jpg
# os.path.dirname(__file__) 结果 D:\PycharmProjects\spider\day21\vehicle_home\vehicle_home\
# 创建图片存放路径 xxx\vehicle_home\result_pic
pic_path = os.path.join(os.path.dirname(__file__), 'result_pic')
# 下载图片 xxx\vehicle_home\result_pic\xxx.jpg
request.urlretrieve(pic_url, pic_path + '/' + pic_name)
return item
# 爬虫代码
import scrapy
from day21.vehicle_home.vehicle_home.items import VehicleHomeItem
class VehPicSpider(scrapy.Spider):
name = 'veh_pic'
allowed_domains = ['car.autohome.com.cn']
base_url = 'https://car.autohome.com.cn/photolist/series/18/p{}/'
start_urls = [base_url.format(1)]
def parse(self, response):
# 获取图片标签列表
pic_lists = response.xpath('//ul[@id="imgList"]/li')
for pic in pic_lists:
pic_url = pic.xpath('./a/img/@src').extract_first()
# 上述获取的 url 需要进一步补全
pic_url = response.urljoin(pic_url)
item = VehicleHomeItem()
item['pic_url'] = pic_url
print(item)
yield item
# 翻页逻辑
for page in range(2, 3):
next_url = self.base_url.format(page)
yield scrapy.Request(next_url)
以上就是 Python 爬虫爬取汽车之家网站上的图片的思路和具体演示代码,大家可以套用代码灵活使用。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online