建设银行官方网站登录电脑版,深圳实惠的专业建站公司,html wordpress,建设旅游网站财务分析爬取穷游网的景点评论数据#xff0c;使用selenium爬取edge浏览器的网页文本数据。 同程的评论数据还是比较好爬取#xff0c;不像大众点评需要你登录验证杂七杂八的#xff0c;只需要找准你想要爬取的网页链接就能拿到想要的文本数据。
这里就不得不提一下爬取过程中遇到的…爬取穷游网的景点评论数据使用selenium爬取edge浏览器的网页文本数据。 同程的评论数据还是比较好爬取不像大众点评需要你登录验证杂七杂八的只需要找准你想要爬取的网页链接就能拿到想要的文本数据。
这里就不得不提一下爬取过程中遇到的问题就是关于无头模式和有头模式首先介绍一下什么是无头模式和有头模式
无头模式和有头模式是指网络爬虫在执行过程中是否显示浏览器的界面。
有头模式是指网络爬虫在执行过程中会显示浏览器的界面可以看到爬取过程中的页面加载、点击等操作可以进行人工干预和调试。有头模式一般用于开发和调试阶段便于观察爬虫的执行情况。
无头模式是指网络爬虫在执行过程中不显示浏览器的界面所有的操作都在后台进行不会干扰用户的正常使用。无头模式一般用于实际的爬取任务可以提高爬取效率减少资源消耗。
总的来说无头模式和有头模式的区别在于是否显示浏览器界面有头模式适用于开发和调试阶段无头模式适用于实际的爬取任务。
无头模式的问题
1、无头模式下缺少浏览器信息或默认填充的浏览器信息带有爬虫痕迹会被识别为机器人而导致爬虫执行失败。
2、页面动态加载时有时会根据页面size来布局控件如果size太小会出现控件加载失败情况。
所以经常爬到二十多页的时候就突然报错“找不到元素无法点击”这种的错误。又或者是爬到三十多页又告诉我找不到元素某某列表为空就很烦。
为了解决这个问题我的尝试
1延长页面的存在的时间让服务器充分响应并且模拟手下拉的操作让下面没显示出来的界面加载出来
def to_the_buttom():js document.getElementsByClassName(search-body left_is_mini)[0].scrollTop10000driver.execute_script(js)
def to_the_top():js var qdocument.documentElement.scrollTop0 # 滚动到最上面driver.execute_script(js)
def to_deal_question():driver.implicitly_wait(10)time.sleep(3)to_the_buttom()time.sleep(3)
def to_view():driver.implicitly_wait(10)to_the_buttom()time.sleep(3)button driver.find_element(By.XPATH, //*[idcommentModule]/div[6]/ul/li[7]/a)driver.execute_script(arguments[0].scrollIntoView();, button)
2使用Selenium库中的webdriver来实例化一个Microsoft Edge浏览器的驱动程序并设置了一些选项。
opt Options()
opt.add_argument(--headless)
opt.add_argument(window-size1920x1080)
opt.add_argument(--start-maximized)
driver webdriver.Edge(optionsopt)
url https://you.ctrip.com/sight/daocheng342/11875.html
driver.get(url)
# driver.maximize_window()
然后就可以愉快把评论全拿到手了这里是穷游网木格措的评论。 最后我还用jieba库做了一下词条分析想看看这个景点大家的关注点都是些什么。 全部代码
爬取数据板块
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.keys import Keys
from requests import request
from selenium.webdriver.support import ui
from selenium.webdriver.support.wait import WebDriverWaitdriver webdriver.Edge()
url https://place.qyer.com/poi/V2UJZ1FgBzZTYVI2/
driver.implicitly_wait(10)
driver.get(url)
driver.maximize_window()
def to_the_buttom():jsvar qdocument.documentElement.scrollTop100000driver.execute_script(js)with open(mu_ge_cuo_2.txt, a, encodingutf-8) as f:for x in range(1,6):driver.implicitly_wait(10)to_the_buttom()time.sleep(3)to_the_buttom()for i in range(1,11):textdriver.find_element(By.XPATH, /html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/ul/li[{}]/div/p.format(i)).textf.write(text)f.write(\n)print(x)button driver.find_element(By.XPATH, /html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/div[1]/div/a[{}].format(x))button.click()
# with open(mu_ge_cuo_2.txt, a, encodingutf-8) as f:
# for x in range(6,83):
# driver.implicitly_wait(10)
# to_the_buttom()
# time.sleep(3)
# to_the_buttom()
# for i in range(1,11):
# textdriver.find_element(By.XPATH, /html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/ul/li[{}]/div/p.format(i)).text
# f.write(text)
# f.write(\n)
# print(x)
# button driver.find_element(By.XPATH, /html/body/div/div/div[2]/div/div[4]/div/div[2]/div[1]/div[2]/div[2]/div[1]/div/a[6])
# button.click()time.sleep(100000)
driver.close()
分析数据提取词条板块
import jieba
stopwords [line.strip() for line in open(hit_stopwords.txt,encodingutf-8).readlines()]
stopwords.append(\n)
# print(stopwords)
f1open(mu_ge_cuo_2.txt,r,encodingutf-8)
code[]
for i in f1.read().strip().split( ):words jieba.lcut(i)codewords
d{}
for word in code:if word not in stopwords:d[word]d.get(word,0)1
lslist(d.items())
ls.sort(keylambda s:s[-1],reverseTrue)
print(ls)
f1.close()
with open(mu_ge_cuo_2_results.txt, a, encodingutf-8) as f:for i in range(20):f.write(str(ls[i]))f.write(\n)
里面的stopwords是为了去除标点符号、特殊字符和语气助词在主页的其他文章里有提供。
如果这篇文章能对您有所帮助的话还望点个赞赞呀~