Python爬虫第四次任务
任务预览(2天)
4.1实战大项目:模拟登录丁香园,并抓取论坛页面所有的人员基本信息与回复帖子内容。
注:丁香园论坛:http://www.dxy.cn/bbs/thread/626626#626626
我们可以通过查找<div class= “nav_account”>中的a元素,通过模拟点击这个按钮。
login = browser.find_element_by_class_name('nav_account').find_element_by_tag_name('a')
login.click()
跳转页面之后
我们可以通过获取<div class=“login__tab_wp”>中的a标记,通过找第二个a标记,模拟点击这个按钮。
login_one = browser.find_element_by_class_name('login__tab_wp').find_elements_by_tag_name('a')
login_one[1].click()
获取输入框,使用send_keys()模拟输入,这里就不多说直接提供代码。
name = browser.find_element_by_name('username')
name.send_keys('15779481686')
pwd = browser.find_element_by_name('password')
pwd.send_keys('qwe126386')
login_two = browser.find_element_by_class_name('button')
login_two.click()
登陆的时候会输验证码,但是笔者能力有限,所以不知道到怎么解决。百度之后,可以通过传cookie,直接跳过登陆验证,或者通过超级鹰的提供的api(需要钱)。由于这里,我们用的是selenium自动化,所以我们人为输入。这里先留个坑,等我学会了,就会来告诉如何实现解决验证码的问题。
登陆之后
这个获取用户姓名和用户评论也很简单。这里就直接给代码。
comment_list = browser.find_elements_by_class_name('postbody')
user_list = browser.find_elements_by_class_name('auth')
for i in range(len(comment_list)):
print('用户:' + user_list[i].text)
print('评论是:' + comment_list[i].text.strip())
全部代码在这里:
from selenium import webdriver
from time import sleep
def get_html(url):
browser = webdriver.Chrome()
browser.get(url)
browser.maximize_window()
sleep(5)
login = browser.find_element_by_class_name('nav_account').find_element_by_tag_name('a')
login.click()
sleep(1)
login_one = browser.find_element_by_class_name('login__tab_wp').find_elements_by_tag_name('a')
login_one[1].click()
sleep(5)
name = browser.find_element_by_name('username')
name.send_keys('15779481686')
pwd = browser.find_element_by_name('password')
pwd.send_keys('qwe126386')
login_two = browser.find_element_by_class_name('button')
login_two.click()
sleep(100) #手动解决验证码问题
comment_list = browser.find_elements_by_class_name('postbody')
user_list = browser.find_elements_by_class_name('auth')
for i in range(len(comment_list)):
print('用户:' + user_list[i].text)
print('评论是:' + comment_list[i].text.strip())
if __name__ == '__main__':
url = 'http://www.dxy.cn/bbs/thread/626626#626626'
get_html(url)