python 爬虫进阶教学selenium保存到CSV

python 爬虫进阶教学selenium保存到CSV

**

交流学术思想,加入Q群 号:815783932

**

1.首先你要下载selenium的驱动,具体驱动可以到我主页找资源,各个版本我都有各个操作系统。

import requests,bs4,re,selenium.webdriver,time,csv,threading,os

CHROME_DRIVER ="G:\Download\chromedriver.exe"
BASE_URL = "https://movie.douban.com"
CHART_URL = BASE_URL+"/chart"
driver =selenium.webdriver.Chrome(executable_path=CHROME_DRIVER)
SAVE_DIR = "G:\爬虫文件保存处"
IMAGE_PATH=SAVE_DIR+"\images"
HEADERS=["type","rank","name","rating","comment","img","crew","url"]

2.首先确定好你要爬取的路径的URL 已经你要保存CSV 和图片的路径,以及你需要保存CSV的columns
driver =selenium.webdriver.Chrome(executable_path=CHROME_DRIVER)通过这句话加载驱动。
定义你要爬取的电影为类,给他赋有性质。

class Movie:
    def __init__(self,type):
        self.img= None
        self.name=None
        self.type=type
        self.rank=None
        self.crew=None
        self.rating=None
        self.comment=None
        self.url =None

    def get(self):


        return [self.type,self.rank,self.name,self.rating,self.comment,self.img,self.crew,self.url]

3.定义性质,初值除了type 全部设置为None 我们就是通过类型去爬取其他数据,所以需要传参传入具体的类型type 。写一个get方法 返回所有你爬取的数据。

定义主函数写出具体的type值:

def main():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
    response =requests.get(CHART_URL,headers=headers)

    soup = bs4.BeautifulSoup(response.content.decode("utf-8"),"lxml")

    typrank_list = soup.find_all("a",href=re.compile("^/typerank"))

    for type_item in typrank_list:
        res = re.search(r'[^\x00-\xff]+[^\x00-\xff]', str(type_item))
        type =res.group()
        download_type(type,type_item["href"])

4.typrank_list 是返回爬取链接的href的集合,从条数据就能找到对应的URL 和 具体的URL 的type
我们通过re.search 匹配到具体的类型。type 在这里插入图片描述
5.dowload_type是下面写的函数 通过循环爬取不同类型的电影。

def download_type(type,url):
    driver.get(url=BASE_URL+url)
    save_path = SAVE_DIR+os.sep+type+".csv"

    for item in range(5):
        target = driver.find_element_by_id("footer")
        driver.execute_script("arguments[0].scrollIntoView();",target)
        time.sleep(1)
    time.sleep(2)
    cout = 0
    #####3通过上面定义的driver 控制网页下滑,因为这个网页为了防止反扒设置了用户行为再动态加载数据,  我们通过driver模拟用户行为来不断加载界面。time.sleep(1)是爬取中 
    ##我们设置间歇,以防止爬取过快,网速更不上,没有爬出去到具体界面
    try:
        with open(file=save_path,mode="w",newline="",encoding="utf-8") as file:
            csv_file =csv.writer(file)
            csv_file.writerow(HEADERS)
            ##这是加载入csv的模块,先写好头标题columns
            for content in  driver.find_elements_by_xpath("//div[@class='movie-content']"):
            ###通过先找到具体大模块的内容来爬取具体小部分的内容
                movie=Movie(type)
                movie.url=content.find_element_by_tag_name("a").get_property("href")
                image_url=content.find_element_by_class_name("movie-img").get_property("src")
                ####返回超链接对应网址的方法

                if image_url:
                    movie.img = image_url[image_url.rfind("/") + 1:]
                    threading.Thread(target=dowload_movie_image, args=(image_url, movie.img)).start()


                else:
                    movie.img="没有图片"
                ####这个模块就是如果存在电影图片的链接那么久加载新的函数来下载图片。具体函数下面会定义。

                movie.name=content.find_element_by_class_name("movie-name-text").text
                movie.rank=int(content.find_element_by_class_name("rank-num").text)
                try:

                    movie.crew = content.find_element_by_class_name("movie-crew").text.split
                except:
                    movie.crew = "没有参演人员"
                movie.rating=float(content.find_element_by_class_name("rating_num").text)
                movie.comment = int(re.sub("\D", "", content.find_element_by_class_name("comment-num").text))
 ##爬取到每一个页面的信息。
                csv_file.writerow(movie.get())
                cout+=1
           ##将数据写入CSV
                if cout>=50:
                    raise Exception("爬累了,休息了!")
                    ##每个爬取前五十个 然后抛出异常,直接结束pass
    except Exception:
        pass

6.定义下载图片函数

def dowload_movie_image(url,image_name):
    image_path = IMAGE_PATH + os.sep + image_name
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"}
    response =requests.get(url,headers=headers)
    with open(file=image_path,mode="bw")as file:
        file.write(response.content)

7.主函数运行完成编译:


if __name__ == "__main__":
    main()

如果有用 关注,,打赏一点吧 码字不容易。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普普通通研究生学代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值