python3爬虫Selenium+Chrom爬取今日头条街拍信息

初次写这个,有借鉴别人的地方,写的不好勿喷
开始就上代码,
#爬取的url,title,img,comment,source 通过字典的形式存储在列表里,需要的时候遍历提取就好
在这里插入图片描述

import re
from selenium import webdriver
import time

start_url = "https://www.toutiao.com/search/?keyword=%E8%A1%97%E6%8B%8D"

#爬取的url,title,img,comment,source 通过字典的形式存储在列表里,需要的时候遍历提取就好
info_list = []

def Verification_Code(driver):
    try:
        time.sleep(2)
        driver.switch_to.window(driver.window_handles[0])
        driver.find_element_by_class_name("icon").click()
        time.sleep(2)
        driver.refresh()
        time.sleep(3)
        driver.switch_to.window(driver.window_handles[0])
    except :
        print("无验证码")
        pass


class TouTiao():
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.url = start_url
        # self.driver.get(start_url)
        # time.sleep(1)

    def take_data_last(self):
        #获取新闻URL和标题
        content_list = self.driver.find_elements_by_class_name("link")
        for content in content_list:
            info_dict = {}
            info_dict["url"] = content.get_attribute("href")
            info_dict["title"] = content.text
            info_list.append(info_dict)

        # print(content)
        #获取新闻来源
        sources = self.driver.find_elements_by_class_name("J_source")
        for source in sources:
            info_list[sources.index(source)]["source"] = source.text
        # 获取评论数
        comment_list = self.driver.find_elements_by_class_name("comment")
        for comment in comment_list:
            info_list[comment_list.index(comment)]["comment"] = comment.text

        #获取预览图片
        view_img_list  = self.driver.find_elements_by_class_name("articleCard")
        for view_img in view_img_list:
            img_html = view_img.get_attribute("innerHTML")
            img = re.findall(r'<img alt="" src="(.*?)">',img_html)[-1]
            info_list[view_img_list.index(view_img)]["view_img"] = img
        print(info_list)
        print(len(info_list))

    def load_data(self):
        self.driver.get(start_url)
        time.sleep(1)
        #这里调用方法直接X掉验证码刷新页面就好了
        Verification_Code(self.driver)
        self.driver.execute_script("window.scrollTo(0,1000);")
        time.sleep(1)
        while True:
            # 获取当前页面所有新闻数量
            before_num =len(self.driver.find_elements_by_class_name("articleCard"))
            # 通过循环让浏览器的滚动条不断的向下拖动
            for i in range(3):
                #拖动滚动条到底部
                self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
                time.sleep(3)
            # 获取当前页面所有新闻数量
            element_num = len(self.driver.find_elements_by_class_name("articleCard"))
            if before_num == element_num:
                self.take_data_last()
                break

    def close_browser(self):
        time.sleep(5)
        self.driver.quit()

    def main(self):
        self.load_data()
        self.close_browser()

if __name__ == '__main__':
    toutiao = TouTiao()
    toutiao.main()

最后的效果,由于是新手,代码都是自己写的,可以参考一下,代码和功能还有许多改进之处,希望大佬多多指正。
运行结果

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值