python爬虫:用request最简单的代码爬取图片,以及XpathHelper的使用

最近这段时间自己一直在学习数据分析这一块,其中关于数据收集方面就可以用到爬虫。那么自己也想把最近所学的一些知识分享给大家。

爬虫的方式有很多种,我觉得比较方便的selenium和request,这篇文章介绍request的方式,末尾附上代码。

首先来看爬取图片的布骤:
1、抓取网页url
2、找到自己想要爬取的内容,并解析内容(这里是所有布骤最难的)
3、保存图片包括(文件夹的路径,图片名称)
4、翻页爬取
学会以上的基本布骤基本上是OK啦,有些高手还会加入判断,或者多线程运行等等,哎算了。。。

对了在开始之前,需要引入包,这里我们会用到request抓取包,os路径保存包,etree解析包

import os
import requests
from lxml import etree

然后开始我们的爬取,这里我们用果壳网的在行来实验。
这个网站:


微信截图_20190625120429.png

最终的结果是图片和人名,这样子


微信图片_20190625121238.png

打个码,

网址是这个:

[https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=7](https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=1)

一、爬取网页的主要代码

pic_hxml=requests.get(url,headers=headers)

url是网页的网址
headers是头部,在网页爬取中,很多网站会有反爬的设施,而头部一般来说是一个身份验证一样的代码,模拟人的操作。一般来说头部用User-Agent的代码,这个因个人电脑而异。

headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}

二、解析与找寻内容
我们用etree来解析网页,大家可看到。

html=etree.HTML(pic_hxml.text)
    pic1="//section[@class='flex']/img[@class='mentor-card__avatar']/@src"
    name1="//div[@class='flex align-center wrapper']/span[@class='mentor-card__name']/text()"
    pic2=html.xpath(pic1)
    name2=html.xpath(name1)

其中最难的就是 pic1和name1的寻找了,我在这里是用工具帮忙的利用谷歌浏览器,安装“Xpath Helper”插件。


工具.png

a.安装好后点击插件,你可看到弹出两个小框框
b.按住shift+ctrl,鼠标移动到哪,就需要提取的代码了。
c.适当缩短内容,达到遍历整个网页。


xpath_heper使用.png

我们要的结果是这个:


结果.png

然后按同样的方式提取名字,注意文字后要加"/text()"才能显示。
最后用name2=html.xpath(name1),就完成了提取。

三、保存文件

1、设置文件路径,文件名和图片的url

用for循环解封name和pic

    for name,pic in zip(name2,pic2):
        imgurl=pic#这是图片的url
        path1=os.path.abspath('D:/Users/17617/PycharmProjects/untitled/爬虫练习库/刘亦菲')#这是文件的报春路径
        img_name=name+'.jpg'#图片的名字。别忘了'.jpg'不然图片没法看
        imgpath=os.path.join(path1,img_name)#将路径与文件名结合

2、保存
很简单的三行代码,提取图片,打开设置好的“路径名称盒子”,用“wb"表示写入,然后将图片放进去。

 response=requests.get(imgurl)
    with open (imgpath,'wb') as f:
        f.write(response.content)

四、如果你想用循环提取图片,多看几分钟刷刷的快感,这里就需要设置翻页。

for i in range(1,7,1):
    url='https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page='+str(i)

我们这里设置for循环,i
通常url='www.……'+str(i)
完成翻页设置,当然不同的网页,翻页的方法也不同,但用心寻找还是可以找到规律的,然后根据规律进行循环。

那么我的爬虫是按这些布骤写的,利用函数关系将4个布骤进进行连接。
完整代码:

import os
import requests
from lxml import etree

#保存设置
def down_load(imgpath,imgurl):
    response=requests.get(imgurl)
    with open (imgpath,'wb') as f:
        f.write(response.content)
        # shutil.copyfileobj(response.raw,f)
        f.close()

headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
}

#提取内容
def pic_url(url,headers):
    pic_hxml=requests.get(url,headers=headers)
    html=etree.HTML(pic_hxml.text)
    pic1="//section[@class='flex']/img[@class='mentor-card__avatar']/@src"
    name1="//div[@class='flex align-center wrapper']/span[@class='mentor-card__name']/text()"
    pic2=html.xpath(pic1)
    name2=html.xpath(name1)
    for name,pic in zip(name2,pic2):
        imgurl=pic
        path1=os.path.abspath('D:/Users/17617/PycharmProjects/untitled/爬虫练习库/刘亦菲')
        img_name=name+'.jpg'#别忘了'.jpg'不然图片没法看
        imgpath=os.path.join(path1,img_name)
        print('正在下载',img_name)
        print('正在下载', imgurl)
        down_load(imgpath,imgurl)

#翻页设置
for i in range(1,7,1):
    url='https://www.zaih.com/falcon/mentors?first_tag_id=342&first_tag_name=%E4%BA%92%E8%81%94%E7%BD%91%2B&second_tag_id=374&second_tag_name=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page='+str(i)
    pic_url(url,headers)

希望对还在学习爬虫的朋友能够起到帮助作用,如果你还在学习,最好自己能够尝试一下其他的网站,不断练习试错和总结。

有什么问题欢迎在下方留言提问。
本人正在深圳学习数据分析,我的微信是:fxfrom2013
欢迎加我互相交流,互相学习。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343