IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 基于selenium爬取国赛建模优秀作品 -> 正文阅读

[Python知识库]基于selenium爬取国赛建模优秀作品

一、基础环境

1.1版本环境

window10 + pycharm2019.3+python3.7

1.2依赖包

from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import csv
from selenium.webdriver.common.keys import Keys
import lxml
from lxml import etree
import os
import urllib.request
import json
import uuid
import random
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from fpdf import FPDF
from PIL import Image

1.3浏览器驱动

selenium加载浏览器环境需要下载对应的浏览器驱动,随便选择一个喜欢用的就可以了,但是优先推荐Chrome,这里我选择的也是Chrome。

下载地址:http://npm.taobao.org/mirrors/chromedriver/

注意:下载与直接浏览器版本相适应的

二、网页分析

目标网页: http://dxs.moe.gov.cn/zx/hd/sxjm/sxjmlw/2020qgdxssxjmjslwzs/
目标网页
进去之后我们可以发现我们需要爬取的文件在这里
目标文件地址
接着,我们再进去,结果我们发现,网站为了防止我们爬虫,将文件设置成了 图片的方式展示。
无
这估计是网站为了反爬虫设置的,即使我们将图片爬取下来了,其可阅读性将大大降低,但是我们不怕,秉着python爬虫的原则——>可见即可爬,我们可以利用python的第三方库PILFPDF,将图片合成pdf来阅读。
基本分析完毕,我们来进行代码操作

三、代码分析

3.1 反反爬虫操作

# 防止反爬虫
option = ChromeOptions()
option.add_argument('--headless')
#不显示窗口。速度更快
option.add_experimental_option('excludeSwitches', ['enable-automation'])

3.2声明浏览器对象

# 声明浏览器对象
browser = webdriver.Chrome(options=option, executable_path=r'D:\Google\Chrome\Application\chromedriver.exe')

3.3获取目标文件的urls

url = "http://dxs.moe.gov.cn/zx/hd/sxjm/sxjmlw/2020qgdxssxjmjslwzs/"
browser.get(url)
Urls = []
try:
    Class_urls = browser.find_elements_by_xpath('//*[@class="three-tit"]/h4/a')
    for temp_urls in Class_urls:
        Urls.append(temp_urls.get_attribute("href"))
except NoSuchElementException:
    print('没找到')
    # 找到所有文章的urls

3.4 获取图片的urls

for Article_url in Urls:
    Img_urls = []  # 保存图片的地址
    browser.get(Article_url)  # 访问文章的地址
    Article_title = browser.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[2]').get_attribute("textContent")
    print(Article_title)
    try:
        ariticle_urls = browser.find_elements_by_xpath('//*[@class="imgslide-wra"]/img')
        for temp_urls in ariticle_urls:
            Img_urls.append(temp_urls.get_attribute("src"))
    except NoSuchElementException:
        print('没找到')

3.5下载文件

def download(url, name, path):
    if not os.path.exists(path):
        os.makedirs(path)
    # with open(path + str(name) + '.jpg', 'wb') as file:
    #     file.write(urllib.request.urlopen(url).read())
    # file.close()
    urllib.request.urlretrieve(url, path + name + '.jpg')
    print("%s图片下载成功" % name)

3.6 处理图片

def makePdf(pdfName, title,i):  # listPages,以列表形式传入,方便批量合成
    # listimgage需要重新处理,得到绝对路径
    cover = Image.open(path + title.strip()+str(i)+ '.jpg')
    width, height = cover.size
    pdf = FPDF(unit="pt", format=[width, height])
    for j in range(1,i+1):
        pdf.add_page()
        pdf.image(path + title.strip()+str(j)+ '.jpg', 0, 0)
    pdf.output(pdfName, "F")

四、结果展示

结果展示

五、完整代码

from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import csv
from selenium.webdriver.common.keys import Keys
import lxml
from lxml import etree
import os
import urllib.request
import json
import uuid
import random
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from fpdf import FPDF
from PIL import Image

path = 'D:/Desktop/国赛优秀论文/图片/'
Oringin_url = 'http://dxs.moe.gov.cn/'

def del_file(path):
    ls = os.listdir(path)
    for i in ls:
        c_path = os.path.join(path, i)
        if os.path.isdir(c_path):
            del_file(c_path)
        else:
            os.remove(c_path)

def makePdf(pdfName, title,i):  # listPages,以列表形式传入,方便批量合成
    # listimgage需要重新处理,得到绝对路径
    cover = Image.open(path + title.strip()+str(i)+ '.jpg')
    width, height = cover.size
    pdf = FPDF(unit="pt", format=[width, height])
    for j in range(1,i+1):
        pdf.add_page()
        pdf.image(path + title.strip()+str(j)+ '.jpg', 0, 0)
    pdf.output(pdfName, "F")

def download(url, name, path):
    if not os.path.exists(path):
        os.makedirs(path)
    # with open(path + str(name) + '.jpg', 'wb') as file:
    #     file.write(urllib.request.urlopen(url).read())
    # file.close()
    urllib.request.urlretrieve(url, path + name + '.jpg')
    print("%s图片下载成功" % name)


# 防止反爬虫
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
# option.add_argument('--headless')

# 声明浏览器对象
browser = webdriver.Chrome(options=option, executable_path=r'D:\Google\Chrome\Application\chromedriver.exe')

url = "http://dxs.moe.gov.cn/zx/hd/sxjm/sxjmlw/2020qgdxssxjmjslwzs/"
browser.get(url)
Urls = []
try:
    Class_urls = browser.find_elements_by_xpath('//*[@class="three-tit"]/h4/a')
    for temp_urls in Class_urls:
        Urls.append(temp_urls.get_attribute("href"))
except NoSuchElementException:
    print('没找到')
# 找到所有文章的urls
# 进入文章,获取文章的src图片地址

for Article_url in Urls:
    Img_urls = []  # 保存图片的地址
    browser.get(Article_url)  # 访问文章的地址
    Article_title = browser.find_element_by_xpath('/html/body/div[1]/div[3]/div[1]/div[2]').get_attribute("textContent")
    print(Article_title)
    try:
        ariticle_urls = browser.find_elements_by_xpath('//*[@class="imgslide-wra"]/img')
        for temp_urls in ariticle_urls:
            Img_urls.append(temp_urls.get_attribute("src"))
    except NoSuchElementException:
        print('没找到')
    i = 0
    for src_url in Img_urls:
        i += 1
        # 下载图片
        download(src_url, Article_title.strip() + str(i), path)
    # 转化成pdf
    makePdf("D:/Desktop/国赛优秀论文/"+Article_title.strip()+'.pdf',  Article_title.strip(),i)
    print(Article_title.strip() +"下载成功")
    #del_file("D:/Desktop/国赛优秀论文/图片")#删除文件,避免干扰
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 11:58:44  更:2021-08-13 11:59:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 20:02:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码