采用requests和parsel爬取美女图片
#parsel 主要用来将请求后的字符串格式解析成re,xpath,css进行内容的匹配 本代码采用xpath
#爬虫初学2 "设置请求头" "运用parsel"进行爬取美女图片
import requests
import parsel
for page in range(1,6): #打印多页,添加的第一行
print('================正在抓取第{}页数据===================='.format(page)) #添加第二行
'''#确定爬取的网址(可见及可爬),找到headers和设置headers。'''
url='http://www.win4000.com/mobile_2340_0_0_{}.html'.format(str(page)) #修改的第三行 #如果换成http://www.win4000.com/meinvtag4_1.html,则for中xpath定位不到相应图片src,有点瑕疵
#头3 可用
headers={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Connection':'keep-alive',
'Host':'www.win4000.com',
'Cookie':'',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
# 头1 可用
# headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'} #下面header出现'latin-1' codec can't encode character '\u2026',复制的时候没展开,复制不全
#头2 不可用
# headers={'Accept':'text/html,application/xhtml+xm…ml;q=0.9,image/webp,*/*;q=0.8',
# 'Connection':'keep-alive',
# 'Host':'www.win4000.com','Cookie':'security_session_verify=0fa786…e28452325006c4a53c=1584149760',
# 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'} #模拟浏览器访问,主要以键对的形式展现出来
#请求头主要使用uer-agent
'''发送请求及获取数据'''
response=requests.get(url,headers=headers)
data=response.text
# print(data) 没问题
'''解析数据'''#采用parsel转化为selector的对象,从而能调用selector的方法
data=parsel.Selector(data) #Selector要大写
# print(data)
#找到图片所在/html/body/div[5]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li[1]/a #出问题,提取不出数据
data_list=data.xpath('//div[@class="Left_bar"]//ul/li/a/@href').extract() #这样的路径可以提出数据
# print(data_list) #文件可以发现,没问题
'''遍历列表的所有元素'''
for img in data_list:
# print(img) #没问题
'''# 发送相册url的请求,得到响应'''
response_2=requests.get(img,headers=headers).text
# print(data) #能输出,这步没问题
'''#解析为selector对象,找到图片url地址'''
data_2=parsel.Selector(response_2)
# print(data_2) #能输出,没问题
# # /html/body/div[5]/div/div[3]/div[1]/div[1]/div[2]/div/div/ul/li[1]/a/img 提不出数据
# # img_url=data_2.xpath('//div[@class="clearfix"]/li/a/img/@src').extract_first() #提不出数据
img_url = data_2.xpath('//div[@class="main-wrap"]/div[@class="pic-meinv"]/a/img/@src').extract_first() #可以提数据
# print(img_url) #输出能打开的不同图片地址,没问题
#但换成另个网址,如最开始注释的网址,则输出不能打开图片的相同地址,有问题(分析认为是xpath定位不准,之后改用re试试) 问题1:输出None,则上一行少打了@(解决);问题2:http://static.win4000.com/home/images/placeholder.jpg,有的网址xpath定位不准
'''请求图片地址'''
img_data=requests.get(img_url,headers).content #content返回图片、音频等内容
'''保存数据'''
Meitu=img_url.split('/')[-1]
# print(Meitu) #发现只返回一张图片,没起到遍历的效果
with open('D:\python\pycharm\PyCharm 2019.3.3\Meitu\Img\\'+Meitu,'wb') as f:
print('正在保存图片:',Meitu)
f.write(img_data)
模仿qq群821460695清风老师代码