小白selenium爬取东方财富新闻–学习过程,做个记录

小白selenium爬取东方财富新闻–学习过程,做个记录

非计算机专业,只是最近有了些论文的想法,所以想通过学习爬虫方面的知识,获取一些想要是数据。不是专业出身,所以难免会有错误,欢迎指正,共同进步。

准备工作

#导入要用到的库
from selenium import webdriver
import json
import time
from selenium.webdriver.common.by import By
import pandas as pd

因为对爬虫的爬与反爬理解的并不深刻,所以我有些地方的等待时间可能设置的有些久,受制于我这台2016服役的笔记本电脑,响应起来也确实不容易。

#设置请求头和模拟浏览器
option = webdriver.ChromeOptions()
#防止反爬关闭特征,这里是看了很多博主的反爬操作,所以一股脑全部加上去了
option.add_argument("--disable-blink-features")
option.add_argument("--disable-blink-features=AutomationControlled")
option.add_argument("lang=zh_CN.UTF-8")
option.add_argument('User-Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"')
#传入设置
browser  = webdriver.Chrome(chrome_options = option)
time.sleep(5)
#设置网址,并将网址参数导入到浏览器中
url = "https://guba.eastmoney.com/"
browser.get(url)
#设置停顿时间,使得网页全部加载出来
time.sleep(6)

网页信息定位

#观察股吧的加载选项,定位到加载更多按钮
findmore = browser.find_element(By.CSS_SELECTOR,"#mainlist > div > div > div.tab_content.cl > ul > li.tab_content_li.active > div > div.dynamic_load_more")
#设置循环点击加载更多。因为是学习阶段,所以我只设置几次点击,并没有爬取更多的数据,可以根据需要进行更改
i = 1
while i <3:
    findmore.click()
    time.sleep(3)
    i +=1

谷歌浏览器这里可以选择定位,我个人觉得还是挺快的,但是建议还是要学会自己去找定位点。
在这里插入图片描述

爬取相关内容并保存

#建立链接接收字典
pinglun = {}
#定位链接所在位置,这里是注意find_elements后面有个s,这里是定位所需要的所有li
lilist = browser.find_elements(By.CSS_SELECTOR,"#mainlist > div > div > div.tab_content.cl > ul > li.tab_content_li.active > div > ul > li")
#循环遍历所有列表
for li in lilist:
    #定位到标题所在位置并将标题内容提取出来
    a = li.find_element(By.CSS_SELECTOR,".dy_title")
    title= a.text
    #定位到链接所在位置,并将链接提取出来
    b = li.find_element(By.CSS_SELECTOR,".dy_content > a")
    lianjie = b.get_attribute("href")
    #将标题与链接一一对应,填入到字典当中
    pinglun[title] = lianjie
    time.sleep(1)
#存入json文件中
lianjie_json = json.dumps(pinglun,ensure_ascii = False,indent = 4)

将爬取到的链接存入到json文件中,方便阅读或者其他的操作,这里我们后续的步骤用不到。

with open ("guba_file.json",'w',encoding = 'utf-8') as file:
    file.write(lianjie_json)

将我们创建好的字典重新保存为excel格式,用于最后的分析。

#将字典储存为excel表格 ,并设置表格的列标题
shuchu = pd.DataFrame(list(pinglun.items()))
shuchu.to_excel("guba.xlsx",header = ["标题","链接"],index = False)

接下来,我们将通过遍历访问爬取的链接,爬取我们需要的新闻内容,并保存下来。

#读取表格
df = pd.read_excel(r"guba.xlsx")
df.head(5)
#创建接收内容的表格
neirong = {}
#遍历储存的所有链接
for i in range(len(df["标题"])):
    #将链接传入浏览器
    browser.get(df["链接"][i])
    time.sleep(10)
    #通过分析页面信息,发现新闻文本内容的定位不唯一,分为两个定位保存,所以通过try-except进行爬取,以免漏掉信息和出错。
    try:
        e = browser.find_element(By.CSS_SELECTOR,"#ContentBody")
        #只需要文本内容
        g = e.text
        neirong[df["标题"][i]] = g
    #当try内的代码报错的时候,运行except的代码
    except:
        e = browser.find_element(By.CSS_SELECTOR,"#main > div.grid_wrapper > div.grid > div.g_content > div.article.page-article > div.article-body")
        g = e.text
        neirong[df["标题"][i]] = g
#退出浏览器
browser.quit()

最后,将接受内容的字典储存为excel,并将存有链接的表格和存有内容的表格以“标题”进行合并。

#将字典储存为excel表格
baogao = pd.DataFrame(list(neirong.items()))
baogao.to_excel("neirong.xlsx",header = ["标题","内容"],index = False)
#合并两个表格
m1 = pd.read_excel("guba.xlsx",converters={"标题":str,"链接":str})
m2 = pd.read_excel("neirong.xlsx",converters={"标题":str,"内容":str})   
m = pd.merge(m1,m2,on =["标题"],how ='left') 
#输出合并后的内容
m.to_excel("pinglun.xlsx")    

最后的m表格就是所需要的内容,本人的爬虫还在初学阶段,有些地方的处理并不成熟,也有很大的改进空间,向csdn上的大佬不断学习。
小菜狗的第一篇博客,记录一下自己的学习过程。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值