用Python爬取解析过的网页

之前呢,我怕去了百度贴吧的一些图片,并且保存的下来,然后我想用相同的方法爬取淘女郎-美人库的内容,发现不管怎么编写正则表达式都获取不了“Elements”其中的图片链接,之后去网上一查发现,原来我需要爬取的内容都是经过浏览器解析过的JS的内容,所以之前一直用的request.urlopen()方法此时就不管作用了,需要调用PhantomJS来解析网页,然后将解析过的源码进行筛选,就可以了,话不多说,看代码

from selenium import webdriver
import re
from urllib import request
class heiheihei:
    #初始化方法,url参数是等待爬取的网址
    def __init__(self,url):
        self.url=url

    # 此方法用来获取页面内 (JS解析之后的界面)
    def getPage(self):
        #调用PhantomJS解析器解析网页
        driver = webdriver.PhantomJS(executable_path=r'C:\Users\liqifeng\AppData\Local\Programs\Python\Python36\Scripts\phantomjs')
        #获取网页内容
        driver.get(self.url)
        #返回网页源代码
        data = driver.page_source
        return data

    #获取网页中每个女模特的名字
    def getName(self):
        #首先,创建一个list,用来存储名字
        list=[]
        #调用getPage()方法获得网页解析过的源代码
        content=self.getPage()
        #编写pattern
        pattern=re.compile('<span class="name">(.*?)</span>',re.S)
        #将网页内容放进去匹配,并返回所有结果
        result=re.findall(pattern,content)
        #挨个遍历并将内容添加到list中
        for item in result:
            list.append(item)
        #返回list
        return list
    #获取网页中所有模特图片的链接
    def getJpg(self):
        list=[]
        content=self.getPage()
        pattern=re.compile('<div class="img"><img src="//(.*?)"></div>')
        result = re.findall(pattern, content)
        for item in result:
            #再编写一个pattern,筛选链接
            pattern2=re.compile('gtd.*',re.S)
            result2=re.search(pattern2,item)
            list.append(result2.group())
        return list
    #此方法用来保存图片
    #url为图片链接
    #filename为图片名
    def saveJpg(self,url,filename):
        #一次遍历url和filename
        for (jpg,name) in zip(url,filename):
            #完善网址
            jpgurl='http://'+jpg
            #打开网址
            req=request.urlopen(jpgurl)
            #获取图片资源
            u=req.read()
            #完善文件名
            files='E:/jpg/'+name+'.jpg'
            #打开文件
            file=open(files,'wb')
            with file as f:
                #写入图片资源
                f.write(u)
            print('保存图片'+name+'.jpg'+'成功')

#新建一个实例,并传入网址
test=heiheihei('https://mm.taobao.com/search_tstar_model.htm?spm=5679.126488.640745.2.b17c0adHu3H5A')
#获取姓名
lalala=test.getName()
#获取图片
hahaha=test.getJpg()
#保存图片
test.saveJpg(hahaha,lalala)

这里写图片描述

以上为程序运行的结果

猜你喜欢

转载自blog.csdn.net/mrliqifeng/article/details/78023172
今日推荐