栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

爬虫例子简述

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫例子简述

因为学习需要,自己做了一个可以爬取那啥网站新闻内容的爬虫.没什么花里胡哨的东西,就是找到网页中新闻界面的url,然后进入把内容提取出来,然后存到excel表格里.里面的代码都是分成不同函数的,注释也很详细,记录一下,防止自己以后忘记.

import requests
import urllib
import urllib.request
import re
import openpyxl as op

from openpyxl import load_workbook
from bs4 import BeautifulSoup

#这个文件可以直接爬取摘要,但是会有重复和数量限制。

#对链接list使用set方法,可以去除自己列表中的重复元素

def get_url(url):# 输入网址url,爬取整页的全部链接,使用list_url返回
    data = urllib.request.urlopen(url).read()
    data = data.decode('UTF-8')#########################################这个注释之后解决了一个问题
    #print(data)
    linkre = re.compile('href="(.+?)"')#正则表达式#
    list_url = []

    for x in linkre.findall(data):
        #if '.eastmoney.com' in x :
        if 'http://finance.eastmoney.com' in x or 'https://stock.eastmoney.com' in x:
            list_url.append(x)
    return list_url


def verify_abstract(url):#验证是否有摘要,有则返回1,无则返回0
    res = requests.get(url)
    soup = BeautifulSoup(res.text, 'lxml')
    data = soup.select('body > div.main > div.contentwrap > div.contentbox > div.mainleft > div.zwinfos > div.abstract > div.tit')  # 定位数据,新闻
    #print("data数据类型:")
    #print(type(data))
    string = '验证'
    for item_data in data:
        string = item_data.get_text('tit')

    if string=='摘要':
        return 1
        #print("有摘要")
    else:
        #print("无摘要,退出!")
        return 0
    return 1



def time_abstract(url):#使用url对应的地址,获取其中的时间和摘要
    # url = 'https://finance.eastmoney.com/a/202207122446929516.html'
    res = requests.get(url)
    soup = BeautifulSoup(res.text, 'lxml')
    data = soup.select('body > div.main > div.contentwrap > div.contentbox > div.mainleft > div.zwinfos > div.abstract > div.txt')  # 定位数据,新闻
    date = soup.select('#topbox > div.tipbox > div.infos > div:nth-child(1)')  # 定位日期
    #print(date)  # html文件
    result_ta = dict()
    for item_date in date:
        result = {
            'date': item_date.get_text('item')
        }
        date = result['date']
        date.replace('n', '').replace('r', '')
        result_ta['日期'] = date

    for item_data in data:
        result = {
            'abstract': item_data.get_text('txt')
        }
        abstract = str(result['abstract'])  # 摘要前后有空格,注意删除
        abstract = str(abstract).replace(' ', '').replace('n', '').replace('r', '')
        result_ta['摘要'] = abstract
    return result_ta

def verify_repetition(list1,list2):#若是list2里面有list1的元素,则删除list2里的重复元素
    result = []
    for i in list2:#遍历list2,不相同的留下
        if i not in list1:
            result.append(i)
        else:
             continue
    return result


def create_excel():#创建一个excel表格
    ws = op.Workbook()
    wb = ws.create_sheet(index=0)

    wb.cell(row=1, column=1, value='序号')
    wb.cell(row=1, column=2, value='时间')
    wb.cell(row=1, column=3, value='摘要')

    ws.save('D:\金融数据集东方财富摘要.xlsx')
    return 0


def write_data(result,seq):#直接调用该函数将内容写入其中,seq计数
    wb = load_workbook('D:\金融数据集东方财富摘要.xlsx')
    # 激活excel表
    sheet = wb.active
    #seq+=1
    # 向excel中写入对应的value
    sheet.cell(row=seq, column=1).value = seq
    sheet.cell(row=seq, column=2).value = result['日期']
    sheet.cell(row=seq, column=3).value = result['摘要']

    print("数据"+str(seq)+"写入成功")
    wb.save('D:\金融数据集东方财富摘要.xlsx')#该方法会覆盖原有内容
    return 0

url = 'https://www.eastmoney.com'
create_excel()#先创建一个excel表格
seq = 1#计数用,写入内容需要计数
list_first_url = get_url(url)#第一页所有链接
list_old = ['https://www.eastmoney.com']
list_2 = ['https://www.eastmoney.com']
print(list_first_url)
print("第一层链接加载完毕,进入数据验证模块...")

while len(list_first_url) != 0:#删除的这一块,还是很奇怪
    list_old = list_old + list_first_url  # 已访问链接更新
    list_old = list(set(list_old))
    for i in range(len(list_first_url) - 1, -1, -1):
        if verify_abstract(list_first_url[i]) == 0:
            # 链接更新模块
            list_1 = get_url(list_first_url[i])#过渡列表
            list_2 = list_2+list_1#第二层的链接数据
            #list_first_url = list_first_url + list_1  # 第一层url
            continue
        else:
            #链接更新模块
            list_1 = get_url(list_first_url[i])
            list_2 = list_2+list_1  # 第二层的链接数据

            write_data(time_abstract(list_first_url[i]),seq)#字典数据和seq作为参数,才能进行数据写入运算
            seq+=1
            list_first_url.remove(list_first_url[i])
    list_first_url = verify_repetition(list_old,list_2)#更新为二层链接,删除了已用的链接
    list_first_url = list(set(list_first_url))
    print("进入下一层链接")

print("爬虫结束!")




要说爬虫主要难在哪里,大概就是是不知道自己要做什么.一般就分以下几步:

1.利用进入网页,获取网页内容

2.利用定位方法定位到自己需要的数据所在位置

3把数据打包,然后存储到自己想要的位置.

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号