美文网首页
python爬取糗事百科段子

python爬取糗事百科段子

作者: 云胡同学 | 来源:发表于2017-12-12 22:30 被阅读0次
  1. 进入糗事百科网站,右键审查,发现所有的内容是在div标签, class为col1底下。

  2. 然后继续查找各个段子的内容是在div标签,class为content中的span标签里。

    对每个段子获取到span的内容即可,那么这只是当前的页面段子,接下来我们要点击下一页,去爬下一页的段子。

  3. 这时候我们的目的就是要拿到下一页的url,在下一页的位置点击右键审查
    。我们看到路径了,但是每一个li都是一样的,怎么办?如何才能拿到最后一个中的href链接。

  4. 这里我也百思不得其解,卡了很久,后来发现,我可以先拿到class为next的span标签,然后再得到span的父标签li,最后再获取a标签的href链接。

    第二页的路径就是网址+相对路径,其余的页也是一样,得到相对位置即可。

  1. 将每一页爬取的段子内容写到文件中即可。

#!/usr/bin/env python
# encoding=utf-8

"""
爬取糗事百科段子
"""

import codecs
import requests
from bs4 import BeautifulSoup

DOWNLOAD_URL = 'https://www.qiushibaike.com'# 糗事百科的网址

index = 0;# 爬取页的数量
jokeindex = 0 # 段子个数

# 假装自己是个浏览器
def download_page(url):
    return requests.get(url, headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
    }).content


def parse_html(html):
    soup = BeautifulSoup(html)# 得到网页的源代码
    #print(soup);

    # 首先找到是在div标签 class等于col1底下
    joke_list_soup = soup.find('div', attrs={'class': 'col1'})
    #print(joke_list_soup);

    joke_name_list = []# 段子的实际内容

    global jokeindex

    for joke_li in joke_list_soup.find_all('div', attrs={'class': 'content'}):#对每一个段子找到span标签中的文字
        jokeindex = jokeindex + 1
        joke_name = str(jokeindex)+joke_li.find('span',attrs={'': ''}).getText()
        #print(joke_name);
        joke_name_list.append(joke_name)#每一次都追加内容到里面



    page = soup.find('ul',attrs={'class':"pagination"})
    #print(page2);
    page2 = page.find('span',attrs={'class':"next"})
    #print(page2);

    next_page = page2.find_parent()
    #print(next_page);


    global index;
    if next_page and index < 10:
        print(index);
        index = index + 1;
        return joke_name_list, DOWNLOAD_URL + next_page['href']
    return joke_name_list, None


def main():
    url = DOWNLOAD_URL

    with codecs.open('qiushi', 'wb', encoding='utf-8') as fp:#打开qiushi文件,将fp作为文件指针
        global index
        while url:
            html = download_page(url)

            jokes, url = parse_html(html)

            fp.write("第"+str(index)+"页" +'\n'+ u'{jokes}\n'.format(jokes='\n'.join(jokes)))


if __name__ == '__main__':
    main()

相关文章

网友评论

      本文标题:python爬取糗事百科段子

      本文链接:https://www.haomeiwen.com/subject/yejoixtx.html