Python 爬虫

基础入门的方法,有些网站不适用,有的获取不到图片,有的获取的文字会加入换行,需要自行测试。

抓取页面的信息 

 导库

#导库
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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值