基础入门的方法,有些网站不适用,有的获取不到图片,有的获取的文字会加入换行,需要自行测试。
抓取页面的信息
导库
#导库
import selenium #爬虫常用的库
from selenium import webdriver #调用selenium中的webdriver,浏览器驱动
from selenium.webdriver.common.by import By #调用selenium 的By函数
from lxml import etree #获取网页数据的包
import pandas as pd
注意:1-如果没有相关库需要先安装
!pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
2-会用到浏览器驱动,最好使用谷歌浏览器,下载和自己浏览器版本相同驱动器(下载地址:ChromeDriver - WebDriver for Chrome - Downloads),最好将下载好的驱动与代码文件放在同一个文件夹下,不然的话使用驱动时注意使用绝对路径。
定义一个browser用于打开指定网页获取数据
#定义一个browser,用于打开网页
browser=webdriver.Chrome('./chromedriver.exe')
#如果驱动没有在同一文件夹下,注意使用绝对地址
打开页面
#打开网页,这里用了一个input 方便输入地址
link1=input("请输入地址")
browser.get(link1)
#获取网页源码
html=etree.HTML(browser.page_source)
获取信息找出规律
F12查看网页源码,找到信息,copy xpath 或者 copy fullxpath
查看多个标题信息之间的规律
观察不同的变量,将数字变量去掉,用函数进行解析,可以获取到当前页的所有标题信息
#/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div[4]/div/div[1]/a[1]
title_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[1]/a[1]/text()")
#/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div[5]/img
pic_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/img/@src")
#/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div[3]/div/div[1]/div
writer_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[1]/div/text()")
#/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div[4]/div/div[1]/a[2]
jianjie_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[1]/a[2]/text()")
#/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div[5]/div/div[2]/span[1]/em
price_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[2]/span[1]/em/text()")
将获取到的信息拼成Dataframe,方便导出为excel
#定义为字典,再将字典转换为dataframe
info_dict={
"书名":title_list,
"作者":writer_list,
"简介":jianjie_list,
"价格":price_list,
"封面":pic_list
}
#转换为dataframe
book_info=pd.DataFrame(info_dict)
#导出为excel,默认跟代码文件在同一个文件夹里
book_info.to_excel("书籍介绍.xlsx",index=False)
以上为获取单一页面的步骤,如果页面有分页,即可以通过for循环,自动翻页获取各个页面的书籍信息,需要将各个页面的链接规律找出来,循环执行上方的代码即可
#找出页面规律
#第一页:https://download.csdn.net/list/topic/100-0-0-0-2-1.html
#第二页:https://download.csdn.net/list/topic/100-0-0-0-2-2.html
#第六页:https://download.csdn.net/list/topic/100-0-0-0-2-6.html
#发现链接里最后一个数字参数不同,通过for循环打开不同的页面获取信息
book_all=pd.DataFrame()
for i in range(7):
#打开网页
browser.get(f"https://download.csdn.net/list/topic/100-0-0-0-2-{i}.html")
#获取网页源码
html=etree.HTML(browser.page_source)
title_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[1]/a[1]/text()")
pic_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/img/@src")
writer_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[1]/div/text()")
jianjie_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[1]/a[2]/text()")
price_list=html.xpath("/html/body/div[2]/div/div[1]/div/div/div[1]/div[3]/div/div/div[2]/span[1]/em/text()")
info_dict={
"书名":title_list,
"作者":writer_list,
"简介":jianjie_list,
"价格":price_list,
"封面":pic_list}
book_info=pd.DataFrame(info_dict)
#将每一页获取的信息拼接到总表中
book_all=book_all.append(book_info,ignore_index=True)
#将总表导出来
book_all.to_excel("书籍介绍.xlsx",index=False)