Xpath多线程Taptap新游预约Icon图片下载

爬虫步骤:

 1.获取想要爬取网页的源代码。
 2.解析这些代码,获取游戏名称及Icon图片下载链接。
 3.下载图片,将图片存储到指定文件夹。

举例:

 目标网页:https://www.taptap.com/category/e378?page=1
 爬取信息:【游戏名称】,【游戏Icon下载链接】.

PS:这里游戏名称主要用来命名每张下载下来的图片名称

第一步:通过requests获得网页的源代码。

Eg1:

import requests 
html=request.get(url)
第二步:通过etree把这些代码解析成xpath能够使用的格式,通过xpath爬取【游戏名称】,【游戏Icon下载链接】。

Eg2:

from lxml import etree #导入etree
selector = etree.HTML(html.text)

  完成上面操作后我们就可以用xpath进行读取代码了,找到我们想要的内容位置。通过chrome的开发者工具定位信息位置.
  {xpath使用方法:
    //定位根节点
    /往下层寻找
    提取文本内容:/text()
    提取某个属性的内容:/@XXX}


data = selector.xpath('//div[@class="taptap-app-item"]')

  这里采用了先抓大再抓小的步骤,我们先把所有的游戏都抓下来,再在这些游戏里提取我们想要的每个游戏中的信息。
在'div[@class="taptap-app-item"]'中我们在具体定位。


【游戏名称】:

'div[@class="app-item-caption"]/a[@class="item-caption-title flex-text-overflow"]/h4[@class="flex-text"]/text()’

【游戏Icon下载链接】:

'a/img/@data-src'
第三步:下载图片,将图片存储到指定文件夹

Eg3:

from urllib import request
local = 'f:\img\%s.png' % (game_name)#定义图片存储的位置和每个图片的名字
request.urlretrieve(url,local) #下载图片
完整代码
from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool
import requests
from urllib import request
def spider(url):
    html = requests.get(url)
    selector = etree.HTML(html.text)
    data = selector.xpath('//div[@class="taptap-app-item"]')
    for each in data:
        game_name = each.xpath('div[@class="app-item-caption"]/a[@class="item-caption-title flex-text-overflow"]/h4[@class="flex-text"]/text()')[0]
        picture_link = each.xpath('a/img/@data-src')[0]
        print('downloading:',picture_link)
        local = 'f:\img\%s.png' % (game_name)#定义图片存储的位置和每个图片的名字
        request.urlretrieve(picture_link,local) #下载图片
if __name__=="__main__":
    Pool = ThreadPool(4)
    page = []
    for i in range(1,3): #爬取1-2页
        newpage = 'https://www.taptap.com/category/e378?page=' + str(i)
        page.append(newpage)
    results = Pool.map(spider,page)
    Pool.close()
运行结果