由于期末课程作业的数据需要用到投资网站的评论,所以就准备从雪球网上爬取了。话不多说,下面就进入正题。
思路分析
首先登入雪球网,输入自己的关键词查找相关评论。
然后通过F12或者右键-检查进入控制台。
再点击网络查找我们需要的内容封装在哪里。第一次点击时会发现只有如下所示的空白页面,只需要再刷新一下就可以了。
之后发现我们需要的评论内容封装在左侧所示的json文件中,预览以后可见每一条评论都以字典的方式存储,当页的(每页有十条,通过“size:10”可知)所有都评论存在list列表中。
展开每一条评论即可查看网页提供的具体内容,大家可以按照自己所需要的提取相关内容(这次我需要获取每条评论的时间(timeBefore)和具体内容的链接(target),需要通过访问这个链接获取评论文章的具体内容)
下面就是通过我们获取到的链接访问的具体内容页面,同样进入控制台,可以看到内容在article_bd_detail标签中。我们将通过 BeautifulSoup和正则表达式进行网页清洗。
前情提要就到这了,下面上代码。
代码部分
1、用于下载网页的代码:
import pandas as pd
from bs4 import BeautifulSoup
import re
import requests
import json
def download_page(url,para = None):#声明的用来下载网页的方法
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59'}
if para:
response = requests.get(url,params=para,headers = headers)
else:
response = requests.get(url,headers = headers)
response.encoding = response.apparent_encoding
if response.status_code == 200:
return response.text
else:
print ("failed to download the page")
2、用于获取雪球网评论内容的关键代码:(可以自己选择一次性爬多少。) OS:主要是我怕我的电脑遭不住一次性爬完所有评论,才加了这个功能。各位读者要是觉得太麻烦,可以自己改改,不要这个功能的。
def xueqiu(Start,End): #两个参数分别表示开始读取与结束读取的网页页码
comments_list = []
#将响应头的参数补齐以避免无法读取的情况
headers = {
"Refer":"https://xueqiu.com/k?q=%E9%99%90%E5%94%AE%E8%82%A1%E8%A7%A3%E7%A6%81",
"Host": "xueqiu.com",
"Cookie":"acw_tc=2760820216245210669791692ead10af083a4c98f7b2541837fa80a96e6849; xq_a_token=f257b9741beeb7f05f6296e58041e56c810c8ef8; xqat=f257b9741beeb7f05f6296e58041e56c810c8ef8; xq_r_token=2e05f6c50e316248a8a08ab6a47bc781da7fddfb; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTYyNjQwMzgwNSwiY3RtIjoxNjI0NTIxMDUxMDg4LCJjaWQiOiJkOWQwbjRBWnVwIn0.YuyB7t3x8jCpO5aenapczHmoXzYznlC9XUntALPpBV8pBEZIBi1LU8oltfyvxRMerCY3VqsBR8moa64fSvxzArV0RMuL7633bjcB-b0GrQY3tvsva0Nlfj7w3tRTavMfw04fU_LruFbHhoc-LR-D83lH7e_Ndp4ZmwIayI3SEARBHqDWa4RjZ-KAxLiQ-hnS8usiodS8cxyTrmNtcr0hLB59zPCRq2KzO3RCVFuYmaNIRyWXXqcmjFS3tvpQ4FlOLC4YVOzqlb-vyhWJAAuQTXj7-z6XnQcRHRNQw53WRmiivgzv3YVPqIq0qQslJjIczAmmTeZxqYEy3ZMan3Bwow; u=441624521066981; Hm_lvt_1db88642e346389874251b5a1eded6e3=1624521071; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1624521079; d