我的目标是搜集这家公司的所有评论。我试着操纵@Driftr95代码:
def extract(pg):
headers = {'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
url = f'https://www.glassdoor.com/Reviews/3M-Reviews-E446_P{pg}.htm?filter.iso3Language=eng'
# f'https://www.glassdoor.com/Reviews/Google-Engineering-Reviews-EI_IE9079.0,6_DEPT1007_IP{pg}.htm?sort.sortType=RD&sort.ascending=false&filter.iso3Language=eng'
r = requests.get(url, headers, timeout=(3.05, 27))
soup = BeautifulSoup(r.content, 'html.parser')# this a soup function that retuen the whole html
return soup
for j in range(1,21,10):
for i in range(j+1,j+11,1): #3M: 4251 reviews
soup = extract( f'https://www.glassdoor.com/Reviews/3M-Reviews-E446_P{i}.htm?filter.iso3Language=eng')
print(f' page {i}')
for r in soup.select('li[id^="empReview_"]'):
rDet = {'reviewId': r.get('id')}
for sr in r.select(subRatSel):
k = sr.select_one('div:first-of-type').get_text(' ').strip()
sval = getDECstars(sr.select_one('div:nth-of-type(2)'), soup)
rDet[f'[rating] {k}'] = sval
for k, sel in refDict.items():
sval = r.select_one(sel)
if sval: sval = sval.get_text(' ').strip()
rDet[k] = sval
empRevs.append(rDet)
在并非所有子评级始终可用的情况下,所有四个子评级结果将为N.A.。
1条答案
按热度按时间wljmcqd81#
所有四个次级评级结果都是不适用的。
有一些事情我没有考虑到,因为我以前没有遇到过,但是updated version of
getDECstars
应该没有这个问题。(如果使用带有参数isv=True
的较长版本,调试和找出代码中缺少的内容会更容易...)我在这个案例中刮了200条评论,结果只有170条独特的评论
通过维护一个已经添加的
reviewId
的列表,并在向empRevs
添加新评论之前对其进行检查,可以很容易地避免重复http往往在100轮后超时...
你可以尝试每50个请求增加一次break和switching out user-agents,但是在这种情况下我会很快使用selenium; this is my suggested solution-如果你只是这样调用它并传递一个url开始:
[last]打印输出第3行:
点击页面直到最后一页(或最大值
maxScrapes
)。不过,您必须在开始时登录,所以请在login_to_gd
中填写您的用户名和密码,或手动登录,方法是将login_to_gd(driverG)
行替换为input(...)
行,等待您登录[然后在终端中按ENTER],然后继续。我认为也可以使用cookie来代替(请求),但是我不擅长处理这个问题。如果你能理解,那么你可以使用
linkToSoup
的某个版本或者你的extract(pg)
;然后,您必须注解掉或删除以## for selenium
结尾的行,并取消注解[或按照说明]以## without selenium
结尾的行。[但请注意,我只对selenium版本进行了全面测试。]CSV [如本例中的“empRevs_3M.csv”和“scrapeLogs_empRevs_3M.csv”]会在每次页面抓取后更新,因此即使程序崩溃[或您决定中断它],它也会保存到上一次抓取。由于它在开始时也会尝试从CSV加载,你可以稍后再继续(只要把
startUrl
设置为你想继续的页面的url--但是即使它在第1页,记住重复的内容会被忽略,所以没关系--尽管这只会浪费一些时间)。