Python中的字符串关键字搜索

Python中的字符串关键字搜索,python,string,python-3.x,list,search,Python,String,Python 3.x,List,Search,我试图在列表中的任何索引中找到一个关键字并获取该索引。我已经用BeautifulSoup4创建了一个小的web刮板来刮取FanFraction数据 由于并非所有的粉丝小说都列出了流派或人物,甚至还有更新日期(如果它们是新出版的),所有的信息都会在不同的索引中 因此,我需要搜索,比如说,'Words:'并获取整个字符串的索引,即'Words:1854'==list[3]或类似的内容,并将其保存为变量Words=list[3],以便稍后调用,以便将其放入excel文件中的正确列中。这是我当前的刮板,

我试图在列表中的任何索引中找到一个关键字并获取该索引。我已经用BeautifulSoup4创建了一个小的web刮板来刮取FanFraction数据

由于并非所有的粉丝小说都列出了流派或人物,甚至还有更新日期(如果它们是新出版的),所有的信息都会在不同的索引中

因此,我需要搜索,比如说,'Words:'并获取整个字符串的索引,即'Words:1854'==list[3]或类似的内容,并将其保存为变量Words=list[3],以便稍后调用,以便将其放入excel文件中的正确列中。这是我当前的刮板,它现在只设置为刮一页,只需减少“u”的原始值,以添加更多要刮的页面

import requests
from bs4 import BeautifulSoup
# import time
# from random import randint
# import xlsxwriter
# import urllib3
# from tinydb import TinyDB, Query

total = 0
u = int(1127)

while u < 2000:
    u = u+1
    url = 'https://www.fanfiction.net/Naruto-Crossovers/1402/0/?&srt=1&lan=1&r=10&p=' + str(u)
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')

    raw = soup.find_all('div', class_='z-indent z-padtop')
    for n in range(len(raw)):
        stats = raw[n]
        info = stats.div
        text = info.text
        formatted = text.split(' - ')
        print(formatted[1:(len(formatted))])
导入请求
从bs4导入BeautifulSoup
#导入时间
#从随机导入randint
#导入xlsxwriter
#导入urllib3
#从tinydb导入tinydb,查询
总数=0
u=int(1127)
而u<2000:
u=u+1
url='1〕https://www.fanfiction.net/Naruto-Crossovers/1402/0/?&srt=1&lan=1&r=10&p=“+str(u)
page=请求.get(url)
soup=BeautifulSoup(page.content,'html.parser')
原始=汤。查找所有('div',class='z-indent z-padtop')
对于范围内的n(长度(原始)):
统计数据=原始数据[n]
info=stats.div
text=info.text
格式化=文本。拆分(“-”)
打印(格式化[1:(len(格式化))])

那么解决方案可能是这样的(检查函数
查找关键字

导入请求
从bs4导入BeautifulSoup
#导入时间
#从随机导入randint
#导入xlsxwriter
#导入urllib3
#从tinydb导入tinydb,查询
总数=0
u=int(1127)
结果=[]
当u<1130时:#由于测试时间的原因,u减小
u=u+1
url='1〕https://www.fanfiction.net/Naruto-Crossovers/1402/0/?&srt=1&lan=1&r=10&p=“+str(u)
page=请求.get(url)
soup=BeautifulSoup(page.content,'html.parser')
原始=汤。查找所有('div',class='z-indent z-padtop')
对于范围内的n(长度(原始)):
统计数据=原始数据[n]
info=stats.div
text=info.text
格式化=文本。拆分(“-”)
如果格式化:
results.append(格式化)
打印(结果)
#用于搜索关键字的函数
def find_关键字(列表,关键字):
结果=[]
对于列表中的元素:
值=“”
对于元素中的标记:
如果tag.find(关键字)>=0:
值=标记
结果。追加(值)
返回(结果)
words_list=find_关键字(结果,'words')#如何搜索和构建关键字列表的示例
打印(单词列表)
这是我想出的代码,它写得非常好。查找功能是必不可少的。
#为了以后使用,搜索关键字并将其添加到指定的列表中
def分配统计(关键字,统计列表):
k=13
b=0
t=0
当k>=1时:
如果t==len(格式化):
t=0
检查=格式化[t]
value=check.find(关键字)
如果值!=-1:
#值=格式化的[t]
stat_list.append(检查)
b=1
如果k<2且b==0:
stat_list.append(“”)
t=t+1
k=k-1
#为了以后使用,搜索关键字并将其添加到指定的列表中
def分配统计状态(关键字,统计列表):
k=13
b=0
t=0
当k>=1时:
如果t==len(格式化):
t=0
检查=格式化[t]
value=check.find(关键字)
如果值!=-1:
#值=格式化的[t]
stat_list.append(检查)
b=1
如果k<2且b==0:
stat_list.append('In-Progress')
t=t+1
k=k-1
#为了以后使用,搜索故事数据列表的指定索引并将其添加到指定列表中
def分配统计数据(索引、统计列表):
stat_list.append(格式化[索引])
#搜索指定故事统计列表的关键字/索引
分配_统计数据(“单词”,单词)
分配混凝土(2,额定值)
分配统计数据(“英语”,语言)
分配统计数据(“章节”,章节)
分配_统计数据(“评论”,评论)
分配_统计数据('FAV',收藏夹)
分配_统计数据('Follows',Follows)
分配_统计数据(“已更新”,已更新)
分配统计数据状态(“完成”,状态)
分配_统计数据(“已发布”,已发布)
分配_stats_concrete(1,交叉线)

我首先要将报废结果保存到列表中,而不是字符串中。然后,最好有定义的列,通过这些列可以将数据排序到Excel文件中。最后,基于该列名,您将能够从报废结果列表中检索数据(尽管该列表也需要格式化)。不幸的是,我不能展示一些代码示例,b/c到目前为止我还不熟悉python,但这就是我实现它的方式。。。不过,这对您来说是可行的解决方案吗?@kolist返回的所有结果都已保存到列表中。我需要弄清楚如何在列表的字符串中找到特定的单词,并找到匹配字符串的索引以保存在excel文件的特定列中,因为并非所有返回的列表都具有相同的元素(故事的统计数据)在相同的索引中,甚至有相同的元素。[《火影忍者与神话》,《等级:K+》,《英语》,《冒险》,《章节:1》,《单词:2835》,《评论:2》,《Favs:6》,《关注:1》,《出版:3/18/2004》,《卡卡西H》,《完成》]['Yu-Gi-Oh&火影忍者','Rated:T','English','Romany/Humor','Chapters:1','Words:32','Reviews:8','Favs:2','Follows:1','Updated:1/5/2004','Published:12/28/2003']这是两个代表两个不同故事的列表,请注意,它们都将单词作为元素和发布日期,但其中一个将更新日期和故事状态(完成)作为元素。这会影响
import requests
from bs4 import BeautifulSoup
# import time
# from random import randint
# import xlsxwriter
# import urllib3
# from tinydb import TinyDB, Query

total = 0
u = int(1127)

results = []
while u < 1130: #decreased u due to testing time
    u = u+1
    url = 'https://www.fanfiction.net/Naruto-Crossovers/1402/0/?&srt=1&lan=1&r=10&p=' + str(u)
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')

    raw = soup.find_all('div', class_='z-indent z-padtop')
    for n in range(len(raw)):
        stats = raw[n]
        info = stats.div
        text = info.text
        formatted = text.split(' - ')
        if formatted:
            results.append(formatted)
print(results)

# function to search for a keyword
def find_keyword(list, keyword):
    results = []
    for element in list:
        value = ''
        for tag in element:
            if tag.find(keyword) >= 0:
                value = tag
        results.append(value)

    return(results)

words_list = find_keyword(results, 'Words') #example of how to search and build list for keyword
print(words_list)
This is the code I came up with, it wordks wonderfully. The find function was essential.

# For later use, searches for keywords and adds them to the specified list
    def assign_stats(keyword, stat_list):
        k = 13
        b = 0
        t = 0
        while k >= 1:
            if t == len(formatted):
                t = 0
            check = formatted[t]
            value = check.find(keyword)
            if value != -1:
                # values = formatted[t]
                stat_list.append(check)
                b = 1
            elif k < 2 and b == 0:
                stat_list.append('')

            t = t + 1
            k = k - 1


    # For later use, searches for keywords and adds them to the specified list
    def assign_stats_status(keyword, stat_list):
        k = 13
        b = 0
        t = 0
        while k >= 1:
            if t == len(formatted):
                t = 0
            check = formatted[t]
            value = check.find(keyword)
            if value != -1:
                # values = formatted[t]
                stat_list.append(check)
                b = 1
            elif k < 2 and b == 0:
                stat_list.append('In-Progress')
            t = t + 1
            k = k - 1


    # For later use, searches for specified indexes of story data lists and adds them to specified list
    def assign_stats_concrete(index, stat_list):
        stat_list.append(formatted[index])

    # Searches for keywords/indexes for the specified story stat lists
    assign_stats('Words', words)
    assign_stats_concrete(2, rating)
    assign_stats('English', language)
    assign_stats('Chapters', chapters)
    assign_stats('Reviews', reviews)
    assign_stats('Favs', favorites)
    assign_stats('Follows', follows)
    assign_stats('Updated', updated)
    assign_stats_status('Complete', status)
    assign_stats('Published', published)
    assign_stats_concrete(1, crossover)