您的位置:首页 > 博客中心 > 互联网 >

物种日历——果壳网

时间:2022-05-10 08:54

前言

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

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

运行环境

  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(r‘\u003E‘, ‘>‘).replace(r‘\u003C‘,‘<‘).replace(r‘\u002F‘, r‘/‘).replace(r‘\"‘, ‘"‘)                 .replace(‘\n‘, ‘‘).replace(‘\t‘, ‘‘).replace(‘\r‘, ‘‘)
            txt = re.sub(‘图片:.+?

‘, ‘

‘, txt) html = etree.HTML(txt) title = html.xpath(‘//h2/text()‘)[0].strip().replace(‘\n‘, ‘‘) 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.缓进则退,不进则亡。

本类排行

今日推荐

热门手游