刘远帆 发表于 2020-12-20 11:31:21

python期末大作业,求思路

给出你想要在网站上获得的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

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

刘远帆 发表于 2020-12-21 10:20:43

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

谢谢谢谢大佬{:10_254:}

刘远帆 发表于 2020-12-24 10:21:48

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-24 10:23:21

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

大佬我的代码发在下面,你觉得还有什么可以改进的地方吗
页: [1]
查看完整版本: python期末大作业,求思路