Pythont通过request以及BeautifulSoup爬取几千条情话

场景

这里要爬取情话的网站:

https://www.duanwenxue.com/huayu/tianyanmiyu/list_69.html

我们分析情话所存取的位置

首先是在class属性为list-short-article的div元素中

然后在其下面是列表,每条下的a标签的text即为我们要爬取的情话内容,且每个a标签的target属性为_blank。

这样只能爬取当前静态网页的情话内容,我们可以分析这个网站的url

第69页

https://www.duanwenxue.com/huayu/tianyanmiyu/list_69.html

第70页

https://www.duanwenxue.com/huayu/tianyanmiyu/list_70.html

可以看到url的前面部分是一致的,只有后面的数字是跟页数是对应的

实现

新建文件夹,在此文件夹下新建get_data.py

代码如下,注释已经讲的很全

import os
#导入request库
import requests
#导入Beautiful Soup库
from bs4 import BeautifulSoup as BS

#定义获取数据的方法
def Get_data():
    #设置请求头headers
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
        'cookie': 'acw_tc=6f3e47cc15498749418558688e3d6410ea97be9a552b180841c5079605; PHPSESSID=s2hjdg3slh32omchfsib4himk0; UM_distinctid=168dbbfe8c533e-0e42df11c1c0a7-9393265-100200-168dbbfe8c71088; CNZZDATA1256319371=345851669-1549873534-%7C1549873534; CNZZDATA1257119496=134880590-1549870452-%7C1549870452; Hm_lvt_a48e6ab107a4e68d47e6fdb5d83961e5=1549875015; Hm_lvt_3c8ecbfa472e76b0340d7a701a04197e=1549875021; CNZZDATA1254708131=653924416-1549874976-%7C1549874976; CNZZDATA1275922735=1673340420-1549874690-%7C1549874690; CNZZDATA1257131565=1820590917-1549873827-%7C1549873827; CNZZDATA1257125147=1301871275-1549871347-https%253A%252F%252Fwww.duanwenxue.com%252F%7C1549871347; Hm_lpvt_a48e6ab107a4e68d47e6fdb5d83961e5=1549875906; Hm_lpvt_3c8ecbfa472e76b0340d7a701a04197e=1549875913; ajax_award_timestamp=1549875887; ajax_award_timestamp__ckMd5=706904497e9c8dfd; ajax_award_key=94a17405d22ab8aacbabbbfdb9d4740c; ajax_award_key__ckMd5=3e97bde02ab1998d',
        'referer': 'https://www.duanwenxue.com/huayu/tianyanmiyu/list_69.html',
        'upgrade-insecure-requests' : '1',
    }
    #根据url中最后数字的不同循环获取情话并调用parse_text写入文件
    for i in range(1,70):
        #使用format可以将i作为占位符的{}里面的内容并填入
        url = 'https://www.duanwenxue.com/huayu/tianyanmiyu/list_{}.html'.format(i)
        #调用requests的get方法爬取内容
        response = requests.get(url,headers=headers)
        #调用parse_text方法来解析网页内容
        parse_text(response.text)


def parse_text(text):
    articles = []
    if text:
        #使用lxml解析器,常用的解析html的解析器
        soup = BS(text,'lxml')
        #调用find方法来首先找到class为list-short-article的div元素再找到target属性为blank的a标签
        arttis = soup.find('div', class_='list-short-article').find_all('a', {'target': "_blank"})
        #这里是通过列表推导式以及for循环获取到每个a标签里面的text内容并通过strip去除空格
        articles = [arttis[i].text.strip() for i in range(len(arttis)) ]
    #将解析后的网页内容存放在text文件中
    #a:表示打开一个文件用于追加。如果该文件已经存在,文件指针会放在文件末尾,也就是说文件内容会被写入到已有内容之后
    #如果该文件不存在,创建新文件进行写入
    with open('Love_words.txt','a',encoding='utf-8') as f:
        for i in articles:
            #每一条内容后面追加换行符
            f.write(i+'\n')


if __name__ == '__main__':
    os.remove('Love_words.txt')
    Get_data()

运行效果

源码以及情话下载

https://download.csdn.net/download/badao_liumang_qizhi/10958393

猜你喜欢

转载自blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87348030