python期末大作业,求思路
给出你想要在网站上获得的5个关键词,注意要含有中文词组,如“中国”,“人工智能”等,自己选定几个网站进行爬取,并汇总这些信息,然后按照出现的频率从高到低次序存储到一个CSV文件中。 这里给个思路吧。1、对选定网站爬取信息,例如新浪、网易等,知道怎么爬。这里可以借助度娘。。。
2、知晓度娘爬取特定站点的方法(其实自行度娘就知道方法了,我这里直接告诉你吧),例如www.abc.com
在度娘的搜索栏,输入site:abc.com+空格+关键词就行了
3、分析度娘的爬取过程,发现很简单的方法:(以度娘搜索site:sina.com 123456789为例),搜索后地址栏的url变成了如下
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=48020221_14_hao_pg&wd=site%3Asina.com%20123456789&rsv_spt=3&oq=SIT%2526gt%253B%253ASINA.%2526lt%253BOM%2520%25E4%25BA%25BA%25E5%25B7%25A5%25E6%2599%25BA%25E8%2583%25BD&rsv_pq=c0e63f1c0002d223&rsv_t=a817Aa%2F5tU%2F535EnkDMJ77HK0zqINE9wa5iqDu%2FKYYr3PtQMQSCLVSOQwxB9%2BGTFKWDNEQyc0iUX&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=31&rsv_sug1=13&rsv_sug7=100&bs=SITE%3ASINA.COM%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD
4、测试链接---成功----注意一点,汉字在url中需要转码,具体方法自行度娘
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=48020221_14_hao_pg&wd=site%3Asina.com%20周杰伦&rsv_spt=3&oq=SIT%2526gt%253B%253ASINA.%2526lt%253BOM%2520%25E4%25BA%25BA%25E5%25B7%25A5%25E6%2599%25BA%25E8%2583%25BD&rsv_pq=c0e63f1c0002d223&rsv_t=a817Aa%2F5tU%2F535EnkDMJ77HK0zqINE9wa5iqDu%2FKYYr3PtQMQSCLVSOQwxB9%2BGTFKWDNEQyc0iUX&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=31&rsv_sug1=13&rsv_sug7=100&bs=SITE%3ASINA.COM%20%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD
到这一步完成爬虫问题不大了吧?再不行就去补下基础吧 笨鸟学飞 发表于 2020-12-20 19:08
这里给个思路吧。
1、对选定网站爬取信息,例如新浪、网易等,知道怎么爬。这里可以借助度娘。。。
2、知 ...
谢谢谢谢大佬{:10_254:} import requests
import csv
SUCCESS_CODE=200#成功访问状态码
FILE_NAME="test.csv"#保存的文件名
keyWords=["中国","科技","文化","政策","北京"]#5个关键字
headers={"User-Agent":"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}
#6个网站
webs=[
"https://www.bnu.edu.cn/index.htm",
"http://www.bnuzh.edu.cn/",
"http://jwb.bnu.edu.cn/",
"https://www.bnu.edu.cn/xysh/index.htm",
"https://www.bnu.edu.cn/kxyj/index.htm",
"http://www.bnuzh.edu.cn/xqjj/bnsd/index.htm"
]
#保存文本文件,测试用
def saveFile(fileName,text,encoding="utf-8"):
with open(fileName,"w",encoding=encoding) as f:
f.write(text)
class MyWeb:
def __init__(self,web):
self.website=web
self.count={"中国":0,"科技":0,"文化":0,"政策":0,"北京":0}
response=requests.get(self.website,headers=headers)
if response.status_code!=SUCCESS_CODE:
#如果访问出问题
raise Exception("Error:failed to get response from"+web)
#将HTML字符编码转换为utf-8
st=response.text
temp=st.encode(response.encoding)
st=temp.decode("utf-8")
#统计各关键词数量
for word in keyWords:
x=0
while True:
x=st.find(word,x)
if x>0:
self.count+=1
x+=1
else:
break
#测试打印其各关键词统计数据
def printData(self):
print(self.count)
#快速排序算法,arr为MyWeb类型的数组,key为关键词
def quickSort(arr,key):
if len(arr)<=1:
return arr
a=arr
x1=[]
x2=[]
for i in range(1,len(arr)):
if arr.count>=a.count:
x1.append(arr)
else:
x2.append(arr)
x1=quickSort(x1,key)
x1.append(a)
x2=quickSort(x2,key)
x1.extend(x2)
return x1
#主程序
if __name__=="__main__":
allWeb=[]
#汇总所有网站爬取的数据
for web in webs:
allWeb.append(MyWeb(web))
#写入到文件中去
with open(FILE_NAME,"wt") as f:
writer=csv.writer(f)
writer.writerow(['关键词/频率排位','1','2','3','4','5','6'])
for word in keyWords:
tmpWebs=quickSort(allWeb,word)
row=
for w in tmpWebs:
row.append(w.website+':'+str(w.count))
writer.writerow(row)
笨鸟学飞 发表于 2020-12-20 19:08
这里给个思路吧。
1、对选定网站爬取信息,例如新浪、网易等,知道怎么爬。这里可以借助度娘。。。
2、知 ...
大佬我的代码发在下面,你觉得还有什么可以改进的地方吗
页:
[1]