- UID
- 1420045
- 在线时间
- 小时
- 注册时间
- 2019-9-12
- 最后登录
- 1970-1-1
- 主题
- 帖子
- 性别
- 保密
|
https://www.nasdaq.com/market-activity/stocks/mmm/news-headlines
1. 3000都是相同结构;需求里面,每一个列表也是相同的结构;先解决列表页,然后再来解决详情
2. 这是列表页。红框里面的就是你你要点击的详情页;html要去了解一下
网页上每个数据都有自己的位置,大多都是规则的。
3.这是MMM的股票列表,但是我们换别的编号的的列表,他的结构没有变,只是变了数据。
(这就是相当于我做一个蛋糕,有方形的容器,也有圆形的容器,我要做什么蛋糕就用什么容器,而不是做一个蛋糕的同时又做一个容器)所以,你那3000个详情页的,你写一个代码就可以了。
怎么获取这三千个详情页的链接呢?肯定是要在列表里面的获取,你既然能拿到列表返回的html,然后解析html,获取到需要的元素。
不是已经会发请求了么?? 怎么找到请求链接,也会了
现在除了解析网页信息,你已经具备采集的能力
写代码有一个很重要的思想
首先要模块化的思维
获取列表页html ---> 拿到详情页链接--->获取详情页html--->提取详情页数据
这个四个步骤,先分解第一个 然后再继续分解第二个 一步一步的解决
from selenium import webdriver
import os
from bs4 import BeautifulSoup
import csv
def go_driver(url):
option = webdriver.ChromeOptions()
# 设置无头浏览器
# option.add_argument('--headless')
driver = webdriver.Chrome(executable_path="C://Webdriver/chromedriver.exe", options=option)
driver.implicitly_wait(60)
driver.get(url)
html = driver.page_source
driver.quit()
return html
def get_detail(url,ticker):
detail_html = go_driver(url)
new_html = BeautifulSoup(detail_html, 'lxml')
title = new_html.find("h1",class_= "article-header__headline").get_text()
publish_date = new_html.find("time",class_= "timestamp__date").get_text()
url = url
body = new_html.find("div",class_= "body__content").get_text()
data = [(ticker, title, publish_date,url,body.strip())]
writer.writerows(data)
def get_html(ticker):
html = go_driver('https://www.nasdaq.com/market-activity/stocks/'+str(ticker)+'/news-headlines')
soup_html = BeautifulSoup(html, 'lxml')
headlines_list = soup_html.find("ul",class_ = "quote-news-headlines__list")
items = headlines_list.find_all("li")
for x in items:
href = x.find("a").get("href")
url = "https://www.nasdaq.com"+href
print(url)
get_detail(url, ticker)
def read_csv():
with open('sp500_tickers.csv', 'r') as f:
reader = csv.reader(f)
name_list = []
for row in reader:
name_list.append(row[1])
# print(row)
return name_list[1:]
if __name__ == '__main__':
# 创建csv
write_csv = open('movies.csv', 'a+', newline='', encoding="gb18030")
writer = csv.writer(write_csv)
writer.writerow(["ticker", "title", "publish_date", "url", "body"])
#获取ticker
reader = read_csv()
for r in reader[501:]:
print(r)
get_html(r)
#关闭文件
write_csv.close()
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|