def OfferLocalBrowser(headless=False):
'''
这个函数用于提供自动登录大众点评的Chrome浏览器
:param headless: 是否使用无头Chrome
:return: 返回浏览器对象
'''
option = webdriver.ChromeOptions()
option.add_argument(r'user-data-dir=C:\Users\hp\AppData\Local\Google\Chrome\User Data')
if headless:
option.add_argument('--headless')
browser = webdriver.Chrome(options=option)
return browser
def CollectDataset(targetUrl,low=3,high=6,page=3,refreshTime=3):
'''
:param targetUrl: 传入可翻页的任意商铺评论页面地址
:param low: 设置随机睡眠防ban的随机整数下限
:param high: 设置随机睡眠防ban的随机整数上限
:param page: 设置最大翻页次数
:param refreshTime: 设置每个页面重复刷新的时间
:return: 返回收集到的汉字列表和编码列表
'''
'''初始化用于存放所有采集到的样本词和对应的样本词编码的列表,CL用于存放所有编码,WL用于存放所有词,二者顺序一一对应'''
CL,WL = [],[]
browser = OfferLocalBrowser(headless=False)
for p in tqdm(range(1,page+1)):
for r in range(refreshTime):
'''访问目标网页'''
html = browser.get(url=targetUrl.format(p))
if '3s 未完成验证,请重试。' in str(browser.page_source):
ii = input()
'''将原始网页内容解码'''
html = browser.page_source
'''解析网页内容'''
obj = BeautifulSoup(html,'lxml')
'''提取评论部分内容以方便之后对评论汉字和SVG图像对应编码的提取'''
raw_comment = obj.find_all('div',{'class':'review-words Hide'})
'''初始化列表容器以有顺序地存放符合汉字或SVG标签格式的内容'''
base_Comment = []
'''利用正则提取符合汉字内容规则的元素'''
firstList = re.findall('(<span>)|([\u4e00-\u9fa5]{1})',str(raw_comment))
'''构造该页面中长度守恒的评论片段列表'''
actualList = []
'''按顺序将所有汉字片段和<span>标签片段拼接在一起'''
for i in range(len(firstList)):
for j in range(2):
if firstList[i][j] != '':
actualList.append(firstList[i][j])
'''打印当前界面所有评论片段的长度'''
print(len(actualList))
'''在每个页面的第一次访问时初始化汉字列表和编码列表'''
if r == 0:
wordList = ['' for i in range(len(actualList))]
codeList = ['' for i in range(len(actualList))]
'''将actualList中粗糙的<span>片段清洗成纯粹的编码片段,汉字部分则原封不定保留,并分别更新wordList和codeList'''
for index in range(len(actualList)):
if '<' in actualList[index]:
codeList[index] = re.findall('class="([a-z0-9]+)"',actualList[index])[0]
else:
wordList[index] = actualList[index]
'''随机睡眠防ban'''
time.sleep(np.random.randint(low,high))
'''将结束重复采集的当前页面中发现的所有汉字-编码对应规则列表与先前的规则列表合并'''
CL.extend(codeList)
WL.extend(wordList)
print('总列表长度:{}'.format(len(CL)))
browser.quit()
return WL,CL
(数据科学学习手札56)利用机器学习破解大众点评文字反爬 (2)
内容版权声明:除非注明,否则皆为本站原创文章。