大家好,我是一名大二学生,这学期我们老师给我们布置的任务是用爬虫爬取一个网站中的某些数据。我做的是较为简单的,只是爬取选股宝中那些标有利好利空以及其对应的名字。因为本人是新手,所以如果有不对或者可以改进的地方欢迎提出来。
首先导入需要的包
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import selenium.webdriver.support.ui as ui
from time import sleep
import re
import time
因为我要爬取的选股宝是动态页面,所以需要安装selenium加上对应浏览器插件,我选的是chrome,所以要安装chromedrive这个插件,在此由于selenium的安装教程在百度上可以很容易找到,我就不多说了。
首先是调动谷歌浏览器,并且读取要爬取的目标网页选股宝。
browser = webdriver.Chrome()
url ="https://xuangubao.cn"
browser.get(url)
然后因为要加载动态页面,所以需要先执行的操作是下啦滚动条还有进行点击事件。
execute_times(3)
click()
wait = ui.WebDriverWait(browser, 10)
#下拉滚动条
def execute_times(times):
for i in range(times + 1):
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
#点击"加载更多"事件
def click():
submit = WebDriverWait(browser,10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR,'#nuxt-layout-container > section > section.home-main-container.main-container > section > div > div.home-news-main > div:nth-child(2) > div'))
)
submit.click()
sleep(3)
调用函数并且执行以及对它进行等待,等待页面完全显示。
execute_times(3)
click()
wait = ui.WebDriverWait(browser, 10)
好了,万事俱备,所以现在开始来抓取所要的数据。首先来观察要抓曲的数据有什么共同点。我发现他们是同在一个class中,所以我们要先把它这个class中所有数据都选取出来。
target = browser.find_elements_by_class_name("news-item-title")
接下来我是利用正则表达式把我需要的标题后面有利空或者利好的这类提取出来,因为也有一些是没有标这两个标志的,所以我用if函数去判断有没有,有就留下,没有就跳过。
#匹配利好的
def gain_good():
for item in target:
name=re.findall(r"(.*?)利好",str(item.text))
situation = re.findall(r"利好",str(item.text))
if name == []:
continue
else:
user=name
if situation == []:
continue
else:
x=situation
for i in range(0,len(user)):
print(user[i]+" "+x[i])
#匹配利空的
def gain_bad():
for item in target:
name1 = re.findall(r"(.*?)利空", str(item.text))
situation1 = re.findall(r"利空", str(item.text))
if name1 == []:
continue
else:
user1 = name1
if situation1 == []:
continue
else:
x1 = situation1
for v in range(0, len(user1)):
print(user1[v] + " " + x1[v])
#调用匹配函数去达成目的
gain_good()
gain_bad()
最后是完成任务后对打开的页面进行关闭。
browser.quit()
我爬取选股宝内容到此结束了,如果有什么建议欢迎留下,因为我只是一个新手,对代码有什么改进的地方也欢迎提出来哦!