from selenium import webdriver
for selenium.webdriver.common.by import By
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy
from PIT import Image
from os import path
利用以上代码实现 Python selenium爬取生成词云图
引用chatgpt部分指引作答:
你的代码有一些错误和问题。这里提供一种修正后的代码示例,它可以使用Python的Selenium库来爬取影评,并生成词云图。
首先,确保你已经安装了selenium、jieba、wordcloud和matplotlib这些库。你可以使用pip命令进行安装,如下所示:
pip install selenium jieba wordcloud matplotlib
接下来,你可以使用下面的代码作为参考,来实现爬取影评并生成词云图:
from selenium import webdriver
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 设置浏览器驱动路径,根据你的实际情况修改
driver_path = 'path/to/your/chromedriver'
# 创建浏览器驱动对象
driver = webdriver.Chrome(executable_path=driver_path)
# 打开目标网页
url = 'https://example.com' # 替换为你要爬取的影评网页地址
driver.get(url)
# 等待网页加载完成
# 这里可以根据需要使用不同的等待方式,比如等待某个元素的出现
driver.implicitly_wait(10)
# 获取影评文本
reviews = driver.find_elements_by_xpath('//div[@class="review-text"]')
text = '\n'.join([review.text for review in reviews])
# 关闭浏览器
driver.quit()
# 对影评文本进行分词
seg_list = jieba.cut(text)
# 统计词频
word_counts = {}
for word in seg_list:
if len(word) > 1: # 过滤掉长度小于等于1的词
word_counts[word] = word_counts.get(word, 0) + 1
# 生成词云图
wordcloud = WordCloud(font_path='path/to/your/font.ttf').generate_from_frequencies(word_counts)
# 显示词云图
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
在上面的代码中,你需要将path/to/your/chromedriver替换为你的Chrome驱动程序的路径。另外,你还需要将https://example.com替换为你要爬取的影评网页的地址。
该代码使用Selenium库打开指定的网页,获取影评文本,并使用jieba库进行分词。然后,根据词频生成词云图,并使用matplotlib库显示词云图。
请注意,根据你的需求和实际情况,你可能需要对代码进行一些适当的修改和调整。
可参考
//设置浏览器驱动的路径
driver_path = 'chromedriver.exe'
//创建浏览器对象
driver = webdriver.Chrome(driver_path)
//打开网页
driver.get('https://www.baidu.com')
//找到搜索框并输入关键词
search_box = driver.find_element(By.ID, 'kw')
search_box.send_keys('Python')
//找到搜索按钮并点击
search_button = driver.find_element(By.ID, 'su')
search_button.click()
//等待页面加载完成
driver.implicitly_wait(10)
//获取搜索结果的文本
search_result = driver.find_element(By.ID, 'content_left').text
//关闭浏览器
driver.quit()
//使用 jieba 分词
words = jieba.cut(search_result)
//将分词结果转换为字符串
words_str = ' '.join(words)
//生成词云图
wordcloud = WordCloud(font_path='msyh.ttc', background_color='white', width=800, height=600).generate(words_str)
//显示词云图
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
import requests
from bs4 import BeautifulSoup
import xlwt
import random
import jieba
import plotWordcloud
def main(page, quote_list):
url = 'https://movie.douban.com/top250?start=' + str(page * 25) + '&filter='
html = request_douban(url)
soup = BeautifulSoup(html, 'lxml')
inq_list = soup.find_all(class_='inq')
content = ''
for i in range(len(inq_list)):
quote_list.append(inq_list[i].text)
def get_user_agent():
USER_AGENTS = [
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
]
user_agent = random.choice(USER_AGENTS)
return user_agent
def request_douban(url):
try:
session = requests.session()
session.headers = {'User-Agent':get_user_agent()}
response = session.get(url)
if response.status_code == 200:
return response.text
except requests.RequestException:
return None
if __name__ == '__main__':
quote_list = []
for i in range(0, 10):
main(i, quote_list)
data_cut = [' '.join(jieba.lcut(i)) for i in quote_list]
# 生成词云
plotWordcloud.generate_wordcloud(' '.join(data_cut))
望采纳,您的支持就是对我最大的动力
from selenium import webdriver
from selenium.webdriver.common.by import By
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from os import path
# 设置 Chrome 浏览器驱动的路径
chrome_driver_path = '/path/to/chromedriver'
# 创建 Chrome 浏览器驱动对象
driver = webdriver.Chrome(executable_path=chrome_driver_path)
# 打开网页
driver.get('https://example.com')
# 等待网页加载完成
driver.implicitly_wait(10)
# 获取网页内容
page_content = driver.page_source
# 关闭浏览器驱动
driver.quit()
# 使用 jieba 进行中文分词
text = ' '.join(jieba.cut(page_content))
# 生成词云图
mask = np.array(Image.open("mask_image.png")) # 词云形状图片的路径
wordcloud = WordCloud(
font_path='font.ttf', # 字体文件路径
mask=mask, # 词云形状图片
background_color='white', # 背景颜色
).generate(text)
# 绘制词云图
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
代码中的路径需要根据实际情况进行修改:
chrome_driver_path:Chrome 浏览器驱动的路径,请指定正确的驱动路径。
driver.get('https://example.com'):将 URL 更改为你想要爬取的网页地址。
mask = np.array(Image.open("mask_image.png")):将 mask_image.png 替换为你自己的词云形状图片的路径。
font_path='font.ttf':将 font.ttf 替换为你自己的字体文件路径。
此外,还需要安装相应的 Python 库:
Selenium:pip install selenium
jieba:pip install jieba
wordcloud:pip install wordcloud
matplotlib:pip install matplotlib
numpy:pip install numpy
PIL:pip install Pillow
根据提供的代码,实现Python使用Selenium进行网页爬取并生成词云图的过程如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy
from PIL import Image
from os import path
driver = webdriver.Chrome('chromedriver路径')
driver.get('目标网页URL')
find_element(By.XPATH, 'XPath表达式').text
获取元素的文本内容。text = "获取的文本内容"
words = jieba.cut(text)
word_list = ' '.join(words)
wc = WordCloud(font_path='字体文件路径').generate(word_list)
<pre><code class="!whitespace-pre hljs language-python">plt.imshow(wc, interpolation=<span class="hljs-string">'bilinear'</span>)
plt.axis(<span class="hljs-string">'off'</span>)
plt.show()
</code></pre>
<pre><code class="!whitespace-pre hljs language-python">driver.quit()
</code></pre>
请注意,上述代码仅提供了一个大致的流程,具体的实现还需要根据您的需求进行进一步的调整和完善。
效果图如下 :
用的是 李焕英的影评 https://movie.douban.com/subject/34841067/comments?status=P ,
下午我把 代码分析写完 ,给你代码哈