【爬虫笔记】ONE一个问题及文章爬取(二)

ONE一个除了有一个ONE模块之外,另外还有ONE 文章,ONE 问题模块

这篇笔记将会讲述如何爬取这两个模块。

15年前,互联网是一个逃避现实的地方;现在,现实是一个可以逃避互联网的地方。

From ONE一个

获得文章链接列表

继续上篇日记,依旧是利用chorme分析网页构成。

由图可看出,文章的主要内容并不在主页当中,需要点开链接跳转得到,我们需要得到每一篇文章的url,组成文章链接列表,再利用列表链接进行文章的爬取。

而通过源代码,我们发现文章的链接都在类名为fp-one-articulodiv中,于是我们遍历该div中所有的a标签,再从标签中提取url

def getArticlelist(page):
    article_list = []
    soup = BeautifulSoup(page, 'html.parser')
    for i in soup.findAll('div',class_ ='fp-one-articulo'):
        for j in i.find_all('a'):
            article_url = j['href']
            article_list.append(article_url)
    return article_list

可以获得文章链接列表:

'http://wufazhuce.com/article/2818', 
'http://wufazhuce.com/article/2819', 
'http://wufazhuce.com/article/2816', 
'http://wufazhuce.com/article/2810', 
'http://wufazhuce.com/article/2808', 
'http://wufazhuce.com/article/2815', 
'http://wufazhuce.com/article/2812'

获得文章内容

既然已经获得文章链接列表,接下来我们就需要遍历列表,对每一个链接进行解析,目标得到文章的作者,标题,内容。

def getArticle(list):
    artlist = []
    for url in list:
        page_article = requests.get(url).content
        soup = BeautifulSoup(page_article, 'html.parser')
        title = soup.find_all('div',class_ = 'one-articulo')[0].h2.text
        autor =  soup.find_all('div',class_ = 'one-articulo')[0].p.text
        article = soup.find_all('div',class_ = 'one-articulo')[0].find_all('div',class_ = 'articulo-contenido')[0].text
        data = {
            'title':title,
            'article':article,
            'autor':autor
        }
        artlist.append(data)
    return artlist

函数返回包含所有文章的标题,作者及内容的字典格式


问题模块

问题模块与上面文章模块没有明显差别,依旧先得到urllist,再对每一个url进行爬取。

def getQuestionlist(page):
    question_list = []
    soup = BeautifulSoup(page, 'html.parser')
    for i in soup.findAll('div',class_ ='fp-one-cuestion'):
        for j in i.find_all('a'):
            question_url = j['href']
            question_list.append(question_url)
    return question_list
    
def getQuestion(list):
    queslist = []
    for url in list:
        page_article = requests.get(url).content
        soup = BeautifulSoup(page_article, 'html.parser')
        question_title = soup.find_all('div',class_ = 'one-cuestion')[0].h4.text
        question_brief = soup.find_all('div',class_ = 'cuestion-contenido')[0].text
        question_content = soup.find_all('div',class_ = 'cuestion-contenido')[1].text
        data = {
            'ques_title':question_title,
            'ques_brief':question_brief,
            'ques_content':question_content
        }
        queslist.append(data)
    return queslist

集合字典

上文中,我们分别获得了ONE模块,ONE 文章模块,ONE 问题模块的字典列表,那么我们如何将三个字典集合为一个字典对象呢?

for one,art,ques in zip(one_dict,article_dict,question_dict):
    dic = {}
    dic.update(one)
    dic.update(art)
    dic.update(ques)
    dict_list.append(dic)
for dict in dict_list:
    for key in dict:
        print key, ':', dict[key]  

我们就获得最终的dict_list数据列表。

源码

#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup

def getPage(url):
    return requests.get(url).content

def getOne(page):
    list = []
    soup = BeautifulSoup(page, 'html.parser')
    for i in soup.find_all('div',class_ = 'item'):
        # image = i.a.img['src']
        onelist = i.find_all('a')
        image = onelist[0].img['src']
        word = onelist[1].text
        infolist = i.find_all('p')
        id = infolist[0].text
        date = infolist[1].text+' '+infolist[2].text
        data = {
            'image':image,
            'word':word,
            'id':id,
            'date':date
        }
        list.append(data)
    return list

def getArticlelist(page):
    article_list = []
    soup = BeautifulSoup(page, 'html.parser')
    for i in soup.findAll('div',class_ ='fp-one-articulo'):
        for j in i.find_all('a'):
            article_url = j['href']
            article_list.append(article_url)
    return article_list

def getQuestionlist(page):
    question_list = []
    soup = BeautifulSoup(page, 'html.parser')
    for i in soup.findAll('div',class_ ='fp-one-cuestion'):
        for j in i.find_all('a'):
            question_url = j['href']
            question_list.append(question_url)
    return question_list

def getArticle(list):
    artlist = []
    for url in list:
        page_article = requests.get(url).content
        soup = BeautifulSoup(page_article, 'html.parser')
        title = soup.find_all('div',class_ = 'one-articulo')[0].h2.text
        autor =  soup.find_all('div',class_ = 'one-articulo')[0].p.text
        article = soup.find_all('div',class_ = 'one-articulo')[0].find_all('div',class_ = 'articulo-contenido')[0].text
        data = {
            'title':title,
            'article':article,
            'autor':autor
        }
        artlist.append(data)
    return artlist

def getQuestion(list):
    queslist = []
    for url in list:
        page_article = requests.get(url).content
        soup = BeautifulSoup(page_article, 'html.parser')
        question_title = soup.find_all('div',class_ = 'one-cuestion')[0].h4.text
        question_brief = soup.find_all('div',class_ = 'cuestion-contenido')[0].text
        question_content = soup.find_all('div',class_ = 'cuestion-contenido')[1].text
        data = {
            'ques_title':question_title,
            'ques_brief':question_brief,
            'ques_content':question_content
        }
        queslist.append(data)
    return queslist


if __name__ == '__main__':
    url = "http://www.wufazhuce.com/"
    dict_list = []
    one_page = getPage(url)
    one_dict = getOne(one_page)
    article_list = getArticlelist(one_page)
    article_dict = getArticle(article_list)
    question_list = getQuestionlist(one_page)
    question_dict = getQuestion(question_list)
    for one,art,ques in zip(one_dict,article_dict,question_dict):
        dic = {}
        dic.update(one)
        dic.update(art)
        dic.update(ques)
        dict_list.append(dic)
    for dict in dict_list:
        for key in dict:
            print key, ':', dict[key]

问题

虽然解决了模块内容问题,但是数据少依旧是一个问题。ONE一个网站只开放了七天的数据,如何获得更多的数据,甚至是一年的数据呢?这么大的数据如何保存呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容