大数据AI

贪心学院第一周机器学习入门作业

贪心学院机器学习-第三周 爬虫练习

职业吹牛逼

本周的课程是跟随老师用request指令简单的爬取了今日头条首页的首页动态信息,通过抓取请求地址获取Json信息的方式,快速的获取文章在首页的基本信息。同时也学习了使用用户代理及IP代理。

贪心学院第一周机器学习入门作业

本次的作业是要获取文章详情页内的标签信息。

作业分析及实施

老师在课堂上抓取首页信息的框架基本可以沿用,抓取的首页信息除了全文外足以覆盖文章的标题、概要等主要信息,只需要添加文章页内的标签信息即可,所以代码的第一部分,除了引入用到的模块以外,基本沿用了老师的框架,返回一个Json格式的首页内容框架:

import requests,json,refrom get_proxy import get_one_proxyfrom get_fake_usragent import get_random_useragentdef get_content(scrapyurl): """ 获取首页的文章列表信息 :param scrapyurl:手动输入URL :return: 爬取后的正文信息 """ #获得随机的IP代理及用户代理 random_proxy = get_one_proxy() random_agent= get_random_useragent().replace("\n","") header = { "user-agent" : random_agent } proxy ={ "proxies" : random_proxy } print("使用的用户代理为{},\n使用的IP代理为{}".format(random_agent,random_proxy)) #获取头条首页文章信息 content = requests.get(scrapyurl,headers=header,proxies=proxy) #将信息转换成Json格式 content_json = json.loads(content.text.encode("utf-8").decode("unicode_escape")) if content_json["message"]!="success": return get_content(scrapyurl) return content_json["data"]

经过分析获得的Json文件发现,其中Source_url的格式为“group/”+一串数字,根据直觉,这串数字前加上“http://toutiao.com/”即可打开文章页面,实验后确实如此,所以设置了一个逐条打开文章页并获取标签信息的函数,功能如下:

(1)传入i,处理出第i条信息的原文页面,代码如下:

url_id =re.findall("\d+",content_data[i]["source_url"]) url ="http://www.toutiao.com/a"+url_id[0]

(2)request,get文本信息,虽然获得的数据回复浏览器版本不够,但是发现了其中的标签信息,可以用正则表达式定位到标签文字,所以整个函数代码如下:

def get_all_tags(content_data,i): """ 打开文章页面利用正则表达式获取文章的所有标签 :param content_data: 首页爬取的Json数据 :param i: Json数据条数的序号 :return: 第i条数据页面内的标签数据 """ random_proxy = get_one_proxy() random_agent = get_random_useragent().replace("\n", "") header= { "user-agent": random_agent } proxy = { "proxies": random_proxy } #提取首页Json信息中的链接,根据规律组合成详细页面的链接 url_id =re.findall("\d+",content_data[i]["source_url"]) url ="http://www.toutiao.com/a"+url_id[0] http_handler = requests.get(url,headers=header,proxies=proxy) if http_handler is None: return get_all_tags(content_data,i) #使用正则表达式 tag = re.findall('{.name.:.(\w*).}',http_handler.text) print(tag) return tag

完成了这两步,信息已经获取完了,剩下还需要:(1)将标签归到相应的标题信息中 (2)将信息输出到Json文件 (3)利用pandas输出成表格,代码块全部罗列至下方:

#将信息写入Json文件def data_to_file(content_data): """ 将信息写入Json文件 :param content_data: Json文件 :return: """ for i in range(len(content_data)): with open("content.json","a+") as data_json_file: json.dump(content_data[i],data_json_file,ensure_ascii=False) data_json_file.write("\n")/*执行代码部分*/#手动输入一个当下可用的地址now_url=input('请提供一个可用的地址:')content_data=get_content(now_url)#获取文章标签,将标签添加到JSON文件中for i in range(len(content_data)): content_tags = get_all_tags(content_data,i) content_data[i]["tags"] = str(content_tags)data_to_file(content_data)#将Json的内容用pandas写入Excel文件

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注