同样是百度”图片“随便点开的一个网站,经过前面一章的练习,我们这次就说的快一点。
因为这次的网站后台使用了js做动态显示,需要使用鼠标滚轮滑倒最最最底部才能显示网页的全部内容,使用urllib已经不能满足我们的需求了
这里介绍另一种获取网页源码的方式
js = "return document.body.innerHTML;"
page_source = driver.execute_script(js)
呀~,不想哔哔了,上章都讲的差不多了,直接贴源码得了:
注意:这次不能直接复制回去运行,得记得下载Firefox驱动"geckodriver",驱动放在当前文件的目录下就好。
import re # 正则
import requests
from selenium import webdriver
import time
'''
这个网站坏得很,需要页面下拉到底部才能抓取网页的完整内容(js影响),
这里与前面用不同的方式抓取网址,需要下载Firefox驱动,并将驱动复制到当前目录下。
'''
url = 'http://pic.hao123.com/meinv?style=xl'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'
' AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3775.400'
' QQBrowser/10.6.4208.400'
}
pic_index = 47
def download_pic_3(u):
global pic_index
# 驱动下载地址: https://github.com/mozilla/geckodriver/releases
driver = webdriver.Firefox()
driver.get(u)
last_height = driver.execute_script("return document.body.scrollHeight")
while True: # 将页面滑动到底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(0.5)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
page_source = driver.execute_script("return document.body.innerHTML;")
driver.close()
# print(page_source)
'''
这个人坏得很,用\/\/来干扰我拿链接,我还要把所有的\都去掉了
'''
list_ht = list(page_source)
str_new = ''
for list_ht_i in list_ht:
if list_ht_i == '\\':
continue
str_new += str(list_ht_i)
print("new::", str_new)
res = re.findall('"(http://hbimg.b0.upaiyun.com/\w+-\w+)"', str_new)
print("有没有啊:", res)
print(len(res))
old_url = ''
for res_i in res:
if res_i == old_url:
continue
else:
old_url = res_i
print("!!!:", res_i)
a = requests.get(res_i) # 这里是requests 不是request
f = open('E:/PIC_YW/%s.jpg' % pic_index, 'wb')
f.write(a.content)
f.close()
print('%s.jpg' % pic_index, '已保存!o(* ̄▽ ̄*)ブ')
pic_index += 1
print('-----华丽的分割线-------------------------------------------------------------------')
if __name__ == "__main__":
url_2 = url
download_pic_3(url_2)
print('就这么几张,没了(;′⌒`)')