物种日历——果壳网

Posted cwily

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物种日历——果壳网相关的知识,希望对你有一定的参考价值。

前言

  果壳网,作为一个开放、多元的泛科技兴趣社区,吸引了百万名有意思、爱知识、乐于分享的年轻人聚集在这里,用知识创造价值,为生活添加智趣。在这里可以关注感兴趣的人,阅读他们的推荐,也将有意思的内容分享给关注的人;依兴趣关注不同的小组,精准阅读喜欢的内容,并与网友交流;在“果壳问答”里提出困惑你的科技问题,或提供靠谱的答案。这是在百度百科上复制的。个人觉得果壳网上的文章还是不错的,比一些自媒体上的标题党强多了。

  本文就是一个爬虫的案例,用来练手,以显得我在忙。

运行环境

  windows 10;

  pycharm;

第三方库

import requests
from lxml import etree
import re
from fake_useragent import UserAgent
import queue
import csv
import time,threading

案例分析

  这个案例的主要难点在于数据清洗。毕竟果壳网上的文章不是纯文本,但是我们想获得得就是纯文本文章。其次就是需要解决网站对标签的编码(个人不认为这算的上是反爬),但是果壳网会封ip的。我在本案例中没有对齐进行处理。

技术图片

对于这一种现象,我采用的就是直接对照,然后进行替换。

 

代码实现

import requests
from lxml import etree
import re
from fake_useragent import UserAgent
import queue
import csv
import time,threading
ua=UserAgent()
url_Queue=queue.Queue(1000)
Q_num=queue.Queue(1000)
for i in range(390):Q_num.put(i)

#获取每一个文章页面的url
def get_url():
    while Q_num:
        url=https://www.guokr.com/apis/minisite/article.json?retrieve_type=by_wx&channel_key=pac&offset={}&limit=10.format(Q_num.get()*10)
        try:
            txt=requests.get(url,headers={"User-Agent":ua.random}).text
            time.sleep(3)
        except:
            print(文章页面抓取完毕)
            break
        article_urls=re.findall(http://www.guokr.com/article/d+/,txt)
        for article_url in article_urls:
            print(article_url)
            url_Queue.put(article_url)
#获取每一个文章页面的详细内容
def get_data():
    while url_Queue:
        url=url_Queue.get()
        try:
            time.sleep(3)
            txt = requests.get(url, headers={"User-Agent": ua.random}).text.replace(ru003E, >).replace(ru003C,<).replace(ru002F, r/).replace(r", ")                 .replace(
, ‘‘).replace(	, ‘‘).replace(
, ‘‘)
            txt = re.sub(图片:.+?</p>, </p>, txt)
            html = etree.HTML(txt)
            title = html.xpath(//h2/text())[0].strip().replace(
, ‘‘)
            print(title)
            author = html.xpath(//*[@id="app"]/section[2]/div/div[2]/div/div[2]/section/span/text())[0]
            w_type = html.xpath(//span[@id="copyright_logo"]/text())[0]
            contents = html.xpath(//section//text())
            f_writer.writerow([title,author,w_type,‘‘.join(contents[52:-60]).strip()])
        except Exception as e:
            time.sleep(5)
            pass

if __name__ == __main__:
    f=open(guokes.csv,w+,encoding=utf-8,newline=‘‘)
    f_writer=csv.writer(f)
    f_writer.writerow([title,author,w_type,content])
    for i in range(10):
        ta=threading.Thread(target=get_url)
        ta.start()
    for j in range(5):
        t1=threading.Thread(target=get_data)
        t1.start()

效果截图

  技术图片

 

 

反思总结

  1. 代码不够简洁,有一些用于的代码。

     2. 没有解决ip被封的问题。

  3. 技术在不停的进步,这些基础的技术也会被替代,最近发现了一个比requests更好的第三方库。这个库就是requests-html。

  4. 终身学习,不能停下学习的脚步。

  5.缓进则退,不进则亡。

以上是关于物种日历——果壳网的主要内容,如果未能解决你的问题,请参考以下文章

[HAOI 2016]食物链

自适应页面

AcWing 1695. 果壳游戏

活动预告|一个重塑区块链行业生态的新物种即将诞生!

[HAOI2016]食物链

[HAOI2016]食物链