[求助] Python 爬虫爬取豆瓣_请不要害羞,语法没有报错,但是最终没有得到图片,请各位大神帮我看看,到底哪里出现了问题??急求

2017-05-12 07:17:08 +08:00
 zuqoid
don't be shy.py

#coding=utf-8
import requests #导入 requests 模块
from bs4 import BeautifulSoup #导入 BeautifulSoup 模块
import os #导入 os 模块

class haixiu():

def __init__(self): #类的初始化操作
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'} #给请求指定一个请求头来模拟 ff 浏览器
self.web_url = 'http://www.dbmeinv.com/dbgroup/current.htm?gid=haixiuzu' #要访问的网页地址
self.folder_path = 'D:\haixiu' #设置图片要存放的文件目录

def get_pic(self):
print('开始网页 get 请求')
r = self.request(self.web_url)
print('开始获取所有 a 标签')
all_a = BeautifulSoup(r.text, 'lxml').find_all('a', class_='links') #获取网页中的 class 为 links 的所有 a 标签
print('开始创建文件夹')
self.mkdir(self.folder_path) #创建文件夹
print('开始切换文件夹')
os.chdir(self.folder_path) #切换路径至上面创建的文件夹



for a in all_a:
img_str = a['src']
print('a 标签的 style 内容是:',img_str)
img_name = a['title']
self.save_img(img_str, img_name) #调用 save_img 方法来保存图片

def save_img(self, url, name): ##保存图片
print('开始请求图片地址,过程会有点长...')
img = self.request(url)
file_name = name + '.jpg'
print('开始保存图片')
f = open(file_name, 'ab')
f.write(img.content)
print(file_name,'图片保存成功!')
f.close()

def request(self, url): #返回网页的 response
r = requests.get(url, headers=self.headers) # 像目标 url 地址发送 get 请求,返回一个 response 对象。有没有 headers 参数都可以。
return r

def mkdir(self, path): ##这个函数创建文件夹
path = path.strip()
isExists = os.path.exists(path)
if not isExists:
print('创建名字叫做', path, '的文件夹')
os.makedirs(path)
print('创建成功!')
else:
print(path, '文件夹已经存在了,不再创建')

beauty = haixiu() #创建类的实例
beauty.get_pic() #执行类中的方法

(望大神指点,谢谢!!)
3505 次点击
所在节点    Python
4 条回复
timothyye
2017-05-12 08:45:10 +08:00
缩进全丢了…… 建议代码先放 gist 上,再发链接吧……
dsg001
2017-05-12 21:53:41 +08:00
粗看抓错标签,应该 find_all('img', class_='height'),推荐用 lxml 的 xpath or cssselect,
alvinbone88
2017-05-13 01:50:59 +08:00
a 标签的 class 属性抓错了,应该是 link 而不是 links
alvinbone88
2017-05-13 02:13:58 +08:00
嘛,刚开始还以为楼主会按照页面里的链接地址一个页面一个页面爬过去的,没想到这个爬虫只能爬那一个页面的所有图片。这样的话可以直接 find_all('img',class_='height_min')。顺便,楼主调用 BeautifulSoup 的语法有点问题,找标签对应的属性应该用 get()方法,用数组会报错。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX