day6-爬虫流程整理

总结

一. selenium设置选项

from selenium import webdriver
# from selenium.webdriver import ChromeOptions

url = 'https://www.jd.com'

# 1.创建设置选项
options = webdriver.ChromeOptions()

# 2.添加选项参数
# 1) 取消测试环境
options.add_experimental_option('excludeSwitches', ['enable-automation'])

# 2) 取消图片加载(提高爬虫效率)
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})

b = webdriver.Chrome(options=options)
b.get(url)
print(b.page_source)

二. frame切换

from selenium import webdriver

url = 'https://mail.163.com/'

b = webdriver.Chrome()
b.get(url)

"""
有的时候会遇到这样的网页:一个网页对应的html标签嵌套了其他的html标签
(前端如果要实现嵌套的功能必须要将被嵌套的html放在iframe标签中),
如果需要爬取网页内容在嵌套的html里面,需要先让浏览器选中内容嵌套的html。
(浏览器对象默认选中的是最外面的html标签)
"""
# 1. 获取提供html标签的iframe标签
box = b.find_element_by_css_selector('#loginDiv>iframe')

# 2.切换frame
b.switch_to.frame(box)

print(b.page_source)

三. 多线程技术

import time
from datetime import datetime
from threading import Thread
# Thread类 - 线程类   Thread类的对象  -  子线程


def download(name):
    print(f'{name}开始下载:{datetime.now()}')
    time.sleep(2)
    print(f'{name}下载结束:{datetime.now()}')


# 1.在一个线程(主线程)中下载三个电影:消耗时间是6秒
# download('肖申克的救赎')
# download('霸王别姬')
# download('阿甘正传')

# 2.在三个子线程中分别下载三个电影
# 1)创建线程对象
t1 = Thread(target=download, args=('肖申克的救赎',))
t2 = Thread(target=download, args=('霸王别姬',))
t3 = Thread(target=download, args=('阿甘正传',))

# 2)启动线程
t1.start()
t2.start()
t3.start()

作业

"""
Time:2021/6/1 18:58
Author:Second
"""
import requests
from lxml import etree
from selenium import webdriver
from datetime import datetime
from threading import Thread


def get_net_data(url):
    b = webdriver.Chrome()
    b.get(url)
    data =  b.page_source
    html = etree.HTML(data)
    lis = html.xpath('//*[@id="rank-view-list"]/div/ul/li')
    list1 = []
    for li in lis:
        book = li.xpath('div[2]/h4/a/text()')[0]
        author = li.xpath('div[2]/p[1]/a[1]/text()')[0]
        list1.append([book, author])
    print(list1)
    return list1


t = []
for x in range(5):
    t.append(Thread(target=get_net_data, args=(f'https://www.qidian.com/rank/collect?chn=21&page={x+1}',)))
for x in t:
    x.start()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、类的定义: 一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾...
    酷飒de小姐姐阅读 1,637评论 0 17
  • 库名称简介 Chardet字符编码探测器,可以自动检测文本、网页、xml的编码。 colorama主要用来给文本添...
    Summer_1981阅读 1,148评论 0 2
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 131,227评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 9,302评论 0 4

友情链接更多精彩内容