这篇文章属于对新浪财经上某一个股个股资讯的爬取并进行舆情分析,目前先只简单说下代码使用方法,后面再细说下Html的解析细节和异步并发爬取。
1、基本思路(以中国中兔为例):
(1)找到个股url
点击公司资讯
可以看到最近的有关中国中兔的新闻,往后翻几页
https://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=sh601888&Page=2
https://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=sh601888&Page=3
https://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=sh601888&Page=4
可以对比下第二第三第四这几页的url,可以发现,只是page这里有所改变,因此,我们只需要对page进行遍历,就可以实现自动翻页。
2.找到具体新闻的url
这里先不说,后面有空再细说,其实就是用正则找出。
以上两部分的代码,这里是对1到5页新闻进行爬取,如果要进行大批量爬取,建议一次最多只30到50页,我自己爬的时候最多到50页就拒绝请求了,此时需要换user-agent或者进行其他反扒措施:
import requests
from lxml import etree
import re
from urllib.request import urlopen, HTTPError
from bs4 import BeautifulSoup
def get_content(url):
try:
html = urllib.request.urlopen(url)
except HTTPError as e:
return None
try:
obj = BeautifulSoup(html.read(),"html.parser")
except HTTPError as f:
return None
nameList = obj.findAll("div", {
"class": "article"})
for name in nameList:
data = name.get_text()
f = open("C:/Users/01/Desktop/股票信息1.csv", 'a', encoding='utf-8')
f.write(data)
f.write("\n")
f.close()
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'}
#爬取到页面源码数据
for i in range(1,5):
url = "https://vip.stock.finance.sina.com.cn/corp/view/vCB_AllNewsStock.php?symbol=sh600066&Page=%d"%i
page_text = requests.get(url=url,headers=headers).text
#数据解析
tree = etree.HTML(page_text)
ex = "<a target='_blank' href='(.*?)'>"
url_list = re.findall(ex, page_text, re.S)
for url in url_list:
get_content(url)
3、数据清洗:
上面爬下来的个股资讯会充斥着各种各样废弃信息,我们需要对其进行筛选清洗。
infopen = open(“C:/Users/01/Desktop/股票信息1.csv”, ‘r’, encoding=‘gbk’)
outopen = open(“C:/Users/01/Desktop/股票信息2.csv”, ‘w’, encoding=‘gbk’)
lines = infopen.readli