python爬成人h网站(selenium)

之前爬一个**网站,因为是动态加载网站,爬下来的图片全是转呀转的GIF图,气死我了,学了selenium之后,龙王归来,势在必得

先看需要的库

from selenium import webdriver
from lxml import etree
import time
import requests

我们使用selenium去打开页面

#实例化了一个浏览器对象(一定要传入浏览器的驱动程序)
wd = webdriver.Chrome(executable_path=r'./chromedriver/chromedriver.exe')
#打开网站
wd.get('这里写你要爬的网址,这里就不方便展示了')

# UA伪装请求头
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chromeh/81.0.4044.138 Safari/537.36'
}

selenium获取网页源码

page_text = wd.page_source

再使xpath去获取图片地址

tree = etree.HTML(page_text)

tr = tree.xpath('//div[@class="nbodys"]/img/@src')

爬完之后发现一个问题,依旧出现转呀转的GIF图,是因为这个网站的图片是动态加载,必须要慢慢去滚动页面,才能加载出来

我们使用js的下拉页面,使用for循环一点一点的下拉

for i in range(1,20000,500):

    wd.execute_script("window.scrollTo(0, %s);"%i)

    page_text = wd.page_source

    tree = etree.HTML(page_text)

这里又出现问题,图片网址夹杂在一堆相同的GIF图地址之中,而且爬出来的h图网址有重合的地方,是因为selenium下拉500的话,会有地方重合爬取

我们需要使用遍历,将一个一个网址遍历出来,再设定一个列表,然后再去判断是否为转呀转GIF图的网址,不是的话,就存在列表之中,再将列表进行去重,最后得到正确的网址

#创建一个空的列表
num = []
#将爬出东西的遍历
for trr in tr:
    #去除障碍信息
    if trr != '/Public/images/tian/loadpic.gif':
        #将爬取到的图片地址存储到num中
        um.append(trr)
#去重
num = list(set(num))

最后进行下载图片

for sum in num:

    #魔鬼细节:网站程序员在jpg后面加了空格防爬,去除即可
    sum = sum.replace(' ','')

    #剪切网址序号作为图片名字
    sy = sum[-6:-4]

    #去除下划线
    sy = sy.replace('_', '')

    img = requests.get(url=sum, headers=header).content

    imgpath = './selenium-图片/' + sy + '.jpg'

    with open(imgpath, 'wb') as fp:
        # 传入二进制内容
        fp.write(img)

        print(sy,'爬取成功!')

print("爬取成功")

 

完整代码

from selenium import webdriver
from lxml import etree
import time
import requests

#实例化了一个浏览器对象(一定要传入浏览器的驱动程序)
wd = webdriver.Chrome(executable_path=r'./chromedriver/chromedriver.exe')
#打开网站
wd.get('这里写你要爬的网址,这里就不方便展示了')

# UA伪装请求头
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chromeh/81.0.4044.138 Safari/537.36'
}

#创建一个空的列表
num = []

print("开始爬取...")

for i in range(1,20000,500):

    wd.execute_script("window.scrollTo(0, %s);"%i)

    page_text = wd.page_source

    tree = etree.HTML(page_text)

    tr = tree.xpath('//div[@class="nbodys"]/img/@src')

    #将爬出东西的遍历
    for trr in tr:

        #去除障碍信息
        if trr != '/Public/images/tian/loadpic.gif':

            #将爬取到的图片地址存储到num中
            num.append(trr)

    time.sleep(1.5)

#去重
num = list(set(num))

for sum in num:

    #魔鬼细节:网站程序员在jpg后面加了空格防爬,去除即可
    sum = sum.replace(' ','')

    #剪切网址序号作为图片名字
    sy = sum[-6:-4]

    #去除下划线
    sy = sy.replace('_', '')

    img = requests.get(url=sum, headers=header).content

    imgpath = './selenium-图片/' + sy + '.jpg'

    with open(imgpath, 'wb') as fp:
        # 传入二进制内容
        fp.write(img)

        print(sy,'爬取成功!')

print("爬取成功")

 

最终的图片就不放出来了,反正非常舒服,这里是提供一个思路,大家注意身体[dog]

你可能感兴趣的:(python,爬虫,python游戏,python,selenium,html,chrome,crm)