Python根据用户需求输入想爬取的内容及页数爬取图片方法详解
在Python中,使用第三方库Requests和BeautifulSoup可以很方便地完成对网站的爬取操作。本攻略将介绍如何根据用户需求输入想爬取的内容及页数爬取图片。
1. 安装相关库
首先,需要安装两个库:Requests和BeautifulSoup。可以使用pip命令进行安装:
pip install requests
pip install beautifulsoup4
2. 进行网站爬取
接下来,需要使用Requests库进行网站爬取操作。我们可以使用输入框让用户输入所需爬取的内容以及要爬取的页数,然后将其传递给Requests库的get()方法进行网站爬取操作。
我们以百度图片搜索为例,假设用户想要搜索名称为“cat”的图片,共爬取3页。相应的代码如下:
import requests
from bs4 import BeautifulSoup
# 输入搜索内容和爬取页数
word = input('请输入要搜索的图片名称:')
page_num = int(input('请输入要爬取的页数:'))
# 处理搜索内容,将空格替换为“+”
word = word.replace(' ', '+')
# 循环爬取指定页数的图片
for i in range(page_num):
# 构造URL
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn=' + str(i * 20)
# 发送请求
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.content, 'html.parser')
imgs = soup.find_all('img', class_='main_img')
# 下载图片
for img in imgs:
img_url = img['src']
img_name = img_url.split('/')[-1]
with open(img_name, 'wb') as f:
f.write(requests.get(img_url).content)
在上述代码中,我们首先使用Input()方法让用户输入要搜索的图片名字以及要爬取的页数。然后,使用replace()方法将空格替换为“+”,构造出百度图片搜索的URL,其中“pn”参数代表的是从第几张图片开始爬取。
接下来,我们使用Requests库的get()方法发送网络请求,并使用BeautifulSoup库解析HTML。在解析完HTML后,我们可以使用find_all()方法获取到所有的图片元素,在循环遍历每个元素的时候,将图片下载到本地。
3. 示例说明
下面是两个使用该方法实现的实际示例。
示例一:爬取豆瓣书籍图片
假设我们想要爬取豆瓣上所有评价数超过1000的书籍封面图片,共爬取20页。相应的代码如下:
import requests
from bs4 import BeautifulSoup
# 输入搜索内容和爬取页数
url = 'https://book.douban.com/tag/?view=type&icn=index-sorttags-all'
page_num = 20
# 循环爬取指定页数的图片
for i in range(page_num):
# 构造URL
url = url + '&start=' + str(i * 20)
# 发送请求
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.content, 'html.parser')
items = soup.find_all('li', class_='subject-item')
# 下载图片
for item in items:
rating_num = item.find('span', class_='rating_nums')
if rating_num and float(rating_num.get_text()) >= 8.5:
img = item.find('img')
img_url = img['src']
img_name = img_url.split('/')[-1]
with open(img_name, 'wb') as f:
f.write(requests.get(img_url).content)
在上述代码中,我们使用requests库访问豆瓣读书首页,并根据“评价数超过1000”以及“评分大于8.5”的条件爬取书籍封面图片。在每次循环中,我们需要更新URL的参数,然后重新请求HTML页面进行解析。
示例二:爬取美女写真图片
假设我们想要爬取某个美女写真网站上的所有图片,共爬取10页。相应的代码如下:
import requests
from bs4 import BeautifulSoup
# 输入搜索内容和爬取页数
url = 'https://www.meituri.com/x/21/'
page_num = 10
# 循环爬取指定页数的图片
for i in range(1, page_num+1):
# 构造URL
if i == 1:
url = url
else:
url = url + 'index_' + str(i) + '.html'
# 发送请求
response = requests.get(url)
# 解析HTML
soup = BeautifulSoup(response.content, 'html.parser')
items = soup.find_all('div', class_='image-item')
# 下载图片
for item in items:
img_url = item.find('a')['href']
img_name = img_url.split('/')[-1]
with open(img_name, 'wb') as f:
f.write(requests.get(img_url).content)
在上述代码中,我们使用requests库访问某个美女写真网站,并抓取所有的图片。在每次循环中,我们需要更新URL的参数,以便获取到所有的页面上的图片元素。然后,我们可以使用find()方法获取到图片的连接,然后将其下载下来。
以上就是本攻略的全部内容。在进行网站爬取时,需要注意到一些法律法规的限制,比如不能爬取侵犯版权的内容。一定要遵守相关法律法规。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python根据用户需求输入想爬取的内容及页数爬取图片方法详解 - Python技术站