为了实现Python爬虫自动下载百度图片,我们需要进行以下步骤:
1. 确定需要爬取的图片链接
我们在百度图片中搜索我们需要的图片,进入图片详情页后,可在浏览器开发者工具中找到图片链接的url。注意仅选择原图链接。
2. 分析页面结构
我们在浏览器开发者工具中可以看到页面的具体结构,可以利用requests
模块进行网页爬取,并解析出图片链接。
示例一:爬取百度图片中的狗狗图片
import requests
from bs4 import BeautifulSoup
search_word = '狗狗'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
url = f'https://image.baidu.com/search/index?tn=baiduimage&word={search_word}'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img', class_='main_img')
for index, img in enumerate(img_tags):
img_url = img['src']
with open(f'{search_word}{index}.jpg', 'wb') as f:
f.write(requests.get(img_url, headers=headers).content)
示例二:爬取百度图片中的美女图片
import requests
from bs4 import BeautifulSoup
search_word = '美女'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
url = f'https://image.baidu.com/search/index?tn=baiduimage&word={search_word}'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
img_tags = soup.find_all('img', class_='main_img')
for index, img in enumerate(img_tags):
img_url = img['src']
with open(f'{search_word}{index}.jpg', 'wb') as f:
f.write(requests.get(img_url, headers=headers).content)
在以上两个示例中,我们都是先通过requests获取百度图片搜索结果页面,再通过BeautifulSoup解析页面结构,获得了所有图片的链接,并使用requests进行下载并保存至本地。
值得注意的是,为了防止因请求频繁被服务器拒绝而导致程序出错,我们需要指定headers来伪装请求。同时,我们采用了with ... as
语句,确保资源被正确关闭并释放,防止内存泄漏的问题。
3. 对图片进行持续化爬取
实现单次爬取是比较简单的,但进行持续化爬取,需要选择合适的爬虫框架。常用的爬虫框架有Scrapy
、PySpider
等。其中,Scrapy
也是比较常用的Python爬虫框架。
示例三:使用Scrapy进行爬取
import scrapy
class BaiduImageSpider(scrapy.Spider):
name = 'baidu_image'
allowed_domains = ['image.baidu.com']
start_urls = ['https://image.baidu.com/search/index?tn=baiduimage&word=狗狗']
def parse(self, response):
img_tags = response.xpath('//img[@class="main_img"]')
for index, img in enumerate(img_tags):
img_url = img.xpath('./@src').extract_first()
yield scrapy.Request(img_url, callback=self.save_image)
def save_image(self, response):
img_content = response.body
search_word = self.start_urls[0].split('=')[-1]
with open(f'{search_word}.jpg', 'wb') as f:
f.write(img_content)
在以上示例中,我们使用Scrapy框架,继承Spider类,实现了对百度图片搜索结果的爬取,并将图片下载到本地。通过xpath解析网页结构,获取图片链接,以及使用yield
语句实现异步请求。
以上三个示例,演示了在Python中使用requests、beautifulsoup以及Scrapy、XPath从百度图片获取信息的方法,如何进行图片下载。在爬虫实现时需要注意指定headers,避免访问频繁而导致程序出错。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫实现百度图片自动下载 - Python技术站