【发布时间】:2018-08-14 17:29:56
【问题描述】:
代码如下。
我在做什么的解释:我有一个关键字列表。我需要确定这些关键字是否出现在任何给定的网页(我输入的)上。我遇到的问题是超过两个词的关键字。例如,如果您查看下面的结果,您会看到“Star”和“Wars”没有出现在列表中。 “星球大战”是我关键字列表中的一个词组,我需要将结果显示为“星球大战”,而不是两个单独的项目。目前,我将 bs4 中的文本转换为字符串,然后转换为列表,我知道这是不正确的,因为它基于 " " 进行分隔,默认情况下,它将拆分我正在搜索的短语。有没有办法让我直接在字符串中搜索导入列表中存在的短语?
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import re
import pandas as pd
#Wikipedia Adress here
site= "website.html"
hdr = {'User-Agent': 'Mozilla/5.0'}
req = Request(site,headers=hdr)
page = urlopen(req)
soup = BeautifulSoup(page,'lxml')
#Company Website Here
site = "website.html"
hdr = {'User-Agent': 'Mozilla/5.0'}
req = Request(site,headers=hdr)
page = urlopen(req)
soup2 = BeautifulSoup(page,'lxml')
#Extracts text from soup and saves as souptext variable
gettext = soup.get_text()
gettext2 = soup2.get_text()
#converts to string
souptext = str(gettext)
souptext2 = str(gettext2)
#converts to list
split = souptext.split(' ')
split2 = souptext2.split(' ')
#combines both splits to one single list
combined = split + split2
#combines both strings to one string
combinedstr = souptext.lower() + souptext2.lower()
#Imports Excel File containing keywords
df = pd.read_csv('Movies.csv')
#Extracts desired column variables as keywords
mylist = df['Titles'].tolist()
liststr = str(mylist)
intersection = [i for i in mylist if i in combined]
results = list()
results.append(intersection)
print(results)
[['Avatar', 'Goodfellas', 'Saw', 'Crash', 'Gladiator', 'Scarface']]
请求输入,所以这里是我会看到的网页文本示例(这是一个字符串):
电影迷已经慢慢远离了《星球大战》和《星际迷航》等怀旧电影。新一代更喜欢具有现代特效和 CGI 的电影,例如《阿凡达》。
在这种情况下,Star Wars 和 Star Trek 将是 mylist 中的关键字。但是,它们不会显示在结果中,因为它们是两个词变量。
目前,我设置了将 html 文本字符串拆分为列表的代码。这适用于单标题电影,但不适用于包含多个单词的电影标题。这是我在这里试图解决的主要问题。我知道拆分字符串不允许我将标题与多个单词相交。
【问题讨论】:
-
请将您的标题更改为对您的问题的解释。
-
一些实际输入会很高兴看到。
-
或者至少显示
gettext的类型并解释你为什么这样做str(gettext)
标签: python python-3.x pandas beautifulsoup urllib