爬虫 案例 图片懒加载 qq空间模拟登录 药监(selenium)

图片懒加载

  • 图片懒加载概念:

    • 图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。

  • 网站一般如何实现图片懒加载技术呢?

    • 在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。

  • 站长素材案例后续分析:通过细致观察页面的结构后发现,网页中图片的链接是存储在了src2这个伪属性中

# 图片懒加载

from lxml import etree
import requests

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

url='http://sc.chinaz.com/tupian/fengjingtupian_%d.html'

fp=open('fengjing.txt','w',encoding='utf-8')
for page in range(1,5):
    if page==1:
        new_url='http://sc.chinaz.com/tupian/fengjingtupian.html'
    else:
        new_url=format(url%page)

    page_text=requests.get(url=new_url,headers=headers).text
    tree=etree.HTML(page_text)
    div_list=tree.xpath('//*[@id="container"]/div')
    for div in div_list:
        img_title=div.xpath('./p/a/text()')[0].encode('iso-8859-1').decode('utf-8')

        # 图片懒加载
        img_src=div.xpath('./ div/a/img/@src2')[0]

        content=img_title+':'+img_src+'\n'
        fp.write(content)

fp.close()

qq空间模拟登录

from selenium import webdriver
from time import sleep

# 指定驱动位置
driver=webdriver.Chrome(executable_path='chromedriver.exe')


url='https://qzone.qq.com/'
driver.get(url)

driver.switch_to.frame('login_frame')
m=driver.find_element_by_id('switcher_plogin')
print(m)
m.click()

driver.find_element_by_id('u').send_keys('用户名')
driver.find_element_by_id('p').send_keys('密码')

driver.find_element_by_id('login_button').click()

sleep(3)

page_text=driver.page_source
print(page_text)



driver.quit()

 药# 使用selenium将药监总局的首页的企业名称进行爬取(1-5页)

from selenium import webdriver
from time import sleep

# 指定浏览器驱动
driver = webdriver.Chrome(executable_path=r'chromedriver.exe')

# 用get打开页面
driver.get('http://125.35.6.84:81/xk/')
fp = open('药监企业.txt', 'w', encoding='utf-8')
for page in range(1, 6):
    if page == 1:
        path = 'pageIto_first'
    else:
        path = f'pageIto_first{page}'
  
  #所见即所得
driver.find_element_by_id(path).click() sleep(
3) a_list = driver.find_elements_by_xpath('//*[@id="gzlist"]/li/dl/a') for a in a_list: msg = a.text fp.write(msg + '\n') print(f'完成第{page}页面数据获取') fp.close() driver.close()

 

posted @ 2019-08-07 17:44  我的IT007  阅读(210)  评论(0编辑  收藏  举报