鱼C论坛

 找回密码
 立即注册
查看: 2938|回复: 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

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

期末大作业

期末大作业
想知道小甲鱼最近在做啥?请访问 -> 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

到这一步完成爬虫问题不大了吧?再不行就去补下基础吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[word]+=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[0]
    x1=[]
    x2=[]
    for i in range(1,len(arr)):
        if arr[i].count[key]>=a.count[key]:
            x1.append(arr[i])
        else:
            x2.append(arr[i])
    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=[word]
            for w in tmpWebs:
                row.append(w.website+':'+str(w.count[word]))
            writer.writerow(row)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬我的代码发在下面,你觉得还有什么可以改进的地方吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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