datawhale爬虫task04


# 实战大项目:模拟登录丁香园,并抓取论坛页面所有的人员基本信息与回复帖子内容。
#
# 丁香园论坛:http://www.dxy.cn/bbs/thread/626626#626626 。
# 丁香园用户名:xxxx
# 密码:ABcd1234

from selenium import webdriver
import time
from lxml import etree
class DingxiangyuanLogin():
    def run(self):
        # 1.请求头:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"}
        #2. 添加请求头信息
        options = webdriver.ChromeOptions()
        options.add_argument('user-agent="ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"')
        #3. 创建浏览器驱动
        chrome_driver = webdriver.Chrome(options=options)

        #4. 登录账号
        #4.1 访问登录界面
        url = "https://auth.dxy.cn/accounts/login?"
        chrome_driver.get(url=url)
        time.sleep(3)
        #4.2 定位电脑登录按钮:
        pc_login_selec_button = chrome_driver.find_element_by_class_name('login__tab_wp').find_elements_by_tag_name('a')[1]
        #4.3 点击进入电脑登录界面:
        pc_login_selec_button.click()
        time.sleep(3)
        #4.4 定位“用户名”输入框
        user_name_box = chrome_driver.find_element_by_name('username')
        #4.5 输入用户名:
        user_name_box.send_keys('xxxx')
        #4.6 定位“密码”输入框
        code_box = chrome_driver.find_element_by_name('password')
        #4.7 输入密码
        code_box.send_keys('ABcd1234')
        #4.8 定位登录按钮
        login_button = chrome_driver.find_element_by_class_name('form__button')
        #4.9 点击登录按钮
        login_button.click()

        #5. 访问目标帖子界面
        chrome_driver.get('http://www.dxy.cn/bbs/thread/626626#626626 ')

        #获取帖子网页源代码
        reply_list = []
        response_data = chrome_driver.page_source
        #使用Xpath解析内容
        xpath_data = etree.HTML(response_data)
        # 获取所有回复节点
        # starts-with(@title,"注册时间")
        replies = xpath_data.xpath('//div[starts-with(@id, "post_")]')
        print("replies: " + str(replies))
        # print(replies)
        for reply in replies:
            reply_dict = {}
            print('reply: ' + str(reply))
            # 回复人姓名:
            auth_name = reply.xpath('.//div[@class="auth"]')[0].xpath('string(.)')
            # print('auth_name: ' + str(auth_name))
            # 级别
            auth_rank = reply.xpath('.//div[@class="info clearfix"]')[0].xpath('string(.)').strip()
            print("auth_rank: " + str(auth_rank))
            # 回复内容
            reply_content = reply.xpath('.//td[@class="postbody"]')[0].xpath('string(.)').strip()
            print('reply_content: ' + str(reply_content))
            reply_dict['auth_name'] = auth_name
            reply_dict['auth_rank'] = auth_rank
            reply_dict['reply_content'] = reply_content
            reply_list.append(reply_dict)




DingxiangyuanLogin().run()

优质内容筛选与推荐>>
1、【Qt开发】QThread介绍
2、iOS版使用的18个开源组件
3、小技巧--解决eclipse导入的jar文件后,无法使用默认包中的方法问题
4、2019-2020-1 20199318《Linux内核原理与分析》第十三周作业
5、85. Maximal Rectangle


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号