(数据科学学习手札56)利用机器学习破解大众点评文字反爬 (2)

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyyww.html