鱼C论坛

 找回密码
 立即注册
查看: 3395|回复: 4

[已解决]python期末大作业,求思路

[复制链接]
发表于 2020-12-20 11:31:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
给出你想要在网站上获得的5个关键词,注意要含有中文词组,如“中国”,“人工智能”等,自己选定几个网站进行爬取,并汇总这些信息,然后按照出现的频率从高到低次序存储到一个CSV文件中。
最佳答案
2020-12-20 19:08:21
这里给个思路吧。
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

到这一步完成爬虫问题不大了吧?再不行就去补下基础吧

期末大作业

期末大作业
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-20 19:08:21 | 显示全部楼层    本楼为最佳答案   
这里给个思路吧。
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

到这一步完成爬虫问题不大了吧?再不行就去补下基础吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-21 10:20:43 | 显示全部楼层
笨鸟学飞 发表于 2020-12-20 19:08
这里给个思路吧。
1、对选定网站爬取信息,例如新浪、网易等,知道怎么爬。这里可以借助度娘。。。
2、知 ...

谢谢谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 10:21:48 | 显示全部楼层
  1. import requests
  2. import csv
  3. SUCCESS_CODE=200#成功访问状态码
  4. FILE_NAME="test.csv"#保存的文件名
  5. keyWords=["中国","科技","文化","政策","北京"]#5个关键字
  6. headers={"User-Agent":"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}
  7. #6个网站
  8. webs=[
  9.     "https://www.bnu.edu.cn/index.htm",
  10.     "http://www.bnuzh.edu.cn/",
  11.     "http://jwb.bnu.edu.cn/",
  12.     "https://www.bnu.edu.cn/xysh/index.htm",
  13.     "https://www.bnu.edu.cn/kxyj/index.htm",
  14.     "http://www.bnuzh.edu.cn/xqjj/bnsd/index.htm"
  15. ]
  16. #保存文本文件,测试用
  17. def saveFile(fileName,text,encoding="utf-8"):
  18.     with open(fileName,"w",encoding=encoding) as f:
  19.         f.write(text)
  20. class MyWeb:
  21.     def __init__(self,web):
  22.         self.website=web
  23.         self.count={"中国":0,"科技":0,"文化":0,"政策":0,"北京":0}
  24.         response=requests.get(self.website,headers=headers)
  25.         if response.status_code!=SUCCESS_CODE:
  26.             #如果访问出问题
  27.             raise Exception("Error:failed to get response from"+web)
  28.         #将HTML字符编码转换为utf-8
  29.         st=response.text
  30.         temp=st.encode(response.encoding)
  31.         st=temp.decode("utf-8")
  32.         #统计各关键词数量
  33.         for word in keyWords:
  34.             x=0
  35.             while True:
  36.                 x=st.find(word,x)
  37.                 if x>0:
  38.                     self.count[word]+=1
  39.                     x+=1
  40.                 else:
  41.                     break
  42.     #测试打印其各关键词统计数据
  43.     def printData(self):
  44.         print(self.count)


  45. #快速排序算法,arr为MyWeb类型的数组,key为关键词
  46. def quickSort(arr,key):
  47.     if len(arr)<=1:
  48.         return arr
  49.     a=arr[0]
  50.     x1=[]
  51.     x2=[]
  52.     for i in range(1,len(arr)):
  53.         if arr[i].count[key]>=a.count[key]:
  54.             x1.append(arr[i])
  55.         else:
  56.             x2.append(arr[i])
  57.     x1=quickSort(x1,key)
  58.     x1.append(a)
  59.     x2=quickSort(x2,key)
  60.     x1.extend(x2)
  61.     return x1
  62. #主程序
  63. if __name__=="__main__":
  64.     allWeb=[]
  65.     #汇总所有网站爬取的数据
  66.     for web in webs:
  67.         allWeb.append(MyWeb(web))
  68.     #写入到文件中去
  69.     with open(FILE_NAME,"wt") as f:
  70.         writer=csv.writer(f)
  71.         writer.writerow(['关键词/频率排位','1','2','3','4','5','6'])
  72.         for word in keyWords:
  73.             tmpWebs=quickSort(allWeb,word)
  74.             row=[word]
  75.             for w in tmpWebs:
  76.                 row.append(w.website+':'+str(w.count[word]))
  77.             writer.writerow(row)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-24 10:23:21 | 显示全部楼层
笨鸟学飞 发表于 2020-12-20 19:08
这里给个思路吧。
1、对选定网站爬取信息,例如新浪、网易等,知道怎么爬。这里可以借助度娘。。。
2、知 ...

大佬我的代码发在下面,你觉得还有什么可以改进的地方吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 22:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表