码迷,mamicode.com
首页 > 其他好文 > 详细

物种日历——果壳网

时间:2020-04-14 12:47:07      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:random   交流   详细   type   reading   alt   data   学习   app   

前言

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

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

运行环境

  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(图片:.+?</p>, </p>, 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.缓进则退,不进则亡。

物种日历——果壳网

标签:random   交流   详细   type   reading   alt   data   学习   app   

原文地址:https://www.cnblogs.com/cwily/p/12696840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!