selenium 快乐爬虫实战之 电影链接的爬取

article/2025/10/3 21:07:59

文章目录

  • 思路
  • 源码分析
    • 初始化 Chrome
    • 获取搜索引擎页面给出的网页链接
    • 循环遍历网页链接,过滤电影链接
    • 第二次过滤并输出链接
    • 最后加上程序入口
  • 完整源码 复制即用
  • 效果

思路

手动用搜索引擎找电影链接慢而且不方便,找到的链接也有限。各大电影网站的链接不是太少就是被封了版权。

但电影链接几乎都是以 thunder迅雷云盘,magnet BT,ed2k电驴的形式出现的

于是乎 我就出现了一个想法,能不能用 selenium 在搜索引擎上搜索电影,遍历搜索引擎页面给出的 网页链接,最后过滤其 html 页面 所有的 电影链接

源码分析

初始化 Chrome

def start_crawl(name):agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.78'list1 = ['0.5', '1']options = webdriver.ChromeOptions()prefs = {'profile.default_content_setting_values': {'images': 2,'javascript': 2}}# options.add_experimental_option('prefs', prefs)#本来是设置不加载图片与javascript脚本,后来发现可能被搜索引擎认为是爬虫封掉ip ,故没有使用此设置options.add_argument('--headless')options.add_argument('--disable-gpu')options.add_argument('--ignore-certificate-error')options.add_argument("user-agent=" + agent)  # str(UserAgent().random))d = webdriver.Chrome(r'chromedriver.exe', options=options)d.get('https://cn.bing.com/')#向搜索引擎发送请求

获取搜索引擎页面给出的网页链接

	time.sleep(2)d.find_element_by_css_selector('input[id="sb_form_q"]').send_keys(str(name) + ' 下载 迅雷下载\n')#模拟在搜索引擎输入框内搜索电影操作 并按下回车urls = []# 储存所有的网页time.sleep(2)for i in range(5):  # 翻五页time.sleep(1)for j in d.find_elements_by_css_selector('li div h2 a'):urls.append(j.get_attribute('href'))#将网页链接添加到 urls 里d.execute_script('var t=document.documentElement.scrollTop=2000;')#将页面拉到最下面time.sleep(0.1)WebDriverWait(d, 10, 1).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, 'li a[title="下一页"]')))#等待按钮加载next_page = d.find_element_by_css_selector('li a[title="下一页"]')next_page.click()#点击下一页按钮翻页

循环遍历网页链接,过滤电影链接

	print(len(urls))list2 = []se = requests.session()se.keep_alive = Falserequests.packages.urllib3.disable_warnings()# requests初始化print('url开始爬取!')for i in urls:'''请求并解析页面网址。'''try:time.sleep(0.2)print(str(i))r = se.get(url=str(i),timeout=5, headers={'useragent': agent, 'content-type': 'charset=utf8'}, verify=False)encoding = cchardet.detect(r.content)['encoding']r.encoding = encoding#获取网页解码方式,防止乱码s = BeautifulSoup(r.text, "lxml")if r.status_code == 200:all_element = s.select('*')for j in all_element:#遍历单个网页里所有的元素try:text = j.textexcept:text = ''#尝试获取元素的text内容try:if text != '':if ('magnet:' in j.text) or ('thunder:' in j.text) or ('ed2k:' in j.text):list2.append(j.text)for z in j.attrs:if ('magnet:' in j.attrs[str(z)]) or ('thunder:' in j.attrs[str(z)]) or ('ed2k:' in j.attrs[str(z)]):list2.append(j.attrs[str(z)])except KeyError:passexcept AttributeError:passexcept Exception as e:print(e)

第二次过滤并输出链接

	list3 = []os.system('cls')print('\n\n--------链接如下--------\n\n')'''净化并输出链接。'''for i in list2:for j in i.split('\n'):if ('magnet:' in j) or ('thunder:' in j) or ('ed2k:' in j):list3.append(j)#去换行符list4 = []for i in list3:for j in i.split(' '):if ('magnet:' in j) or ('thunder:' in j) or ('ed2k:' in j):list4.append(j)#去空格list4 = list(set(list4))#去重for i in list4:print(str(i))print('\n')try:d.quit()#driver 结束os.system('pause')# 程序暂停,为打包成exe形式添加的代码time.sleep(10000)except Exception as e:print(e)time.sleep(10000)

最后加上程序入口

if __name__ == '__main__':name = input('请输入电影名称:')start_crawl(name=name)

完整源码 复制即用

import os
import random
import time
import cchardet
from requests.exceptions import ConnectionError
from selenium import webdriver
#from fake_useragent import UserAgent
import requests
from bs4 import BeautifulSoup
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWaitdef start_crawl(name):agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.78'#name = input('请输入电影名称:')list1 = ['0.5', '1']options = webdriver.ChromeOptions()prefs = {'profile.default_content_setting_values': {'images': 2,'javascript': 2}}# options.add_experimental_option('prefs', prefs)options.add_argument('--headless')options.add_argument('--disable-gpu')options.add_argument('--ignore-certificate-error')options.add_argument("user-agent=" + agent)  # str(UserAgent().random))d = webdriver.Chrome(r'chromedriver.exe', options=options)d.get('https://cn.bing.com/')time.sleep(2)d.find_element_by_css_selector('input[id="sb_form_q"]').send_keys(str(name) + ' 下载 迅雷下载\n')urls = []# 储存所有的网页time.sleep(2)for i in range(5):  # 默认翻五页time.sleep(1)for j in d.find_elements_by_css_selector('li div h2 a'):urls.append(j.get_attribute('href'))d.execute_script('var t=document.documentElement.scrollTop=2000;')time.sleep(0.1)WebDriverWait(d, 10, 1).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, 'li a[title="下一页"]')))next_page = d.find_element_by_css_selector('li a[title="下一页"]')next_page.click()print(len(urls))list2 = []se = requests.session()se.keep_alive = Falserequests.packages.urllib3.disable_warnings()# requests初始化print('url开始爬取!')for i in urls:'''请求并解析页面网址。'''try:time.sleep(0.2)print(str(i))# print(i.get_attribute('href'))r = se.get(url=str(i),timeout=5, headers={'useragent': agent, 'content-type': 'charset=utf8'}, verify=False)encoding = cchardet.detect(r.content)['encoding']r.encoding = encodings = BeautifulSoup(r.text, "lxml")if r.status_code == 200:all_element = s.select('*')for j in all_element:try:text = j.textexcept:text = ''try:if text != '':if ('magnet:' in j.text) or ('thunder:' in j.text) or ('ed2k:' in j.text):# print(''.join(j.text.split(' ')))# print(j.text.replace('\n',''))list2.append(j.text)for z in j.attrs:if ('magnet:' in j.attrs[str(z)]) or ('thunder:' in j.attrs[str(z)]) or ('ed2k:' in j.attrs[str(z)]):# print(j.attrs[str(z)].replace('\n',''))list2.append(j.attrs[str(z)])except KeyError:passexcept AttributeError:passexcept Exception as e:print(e)list3 = []os.system('cls')print('\n\n--------链接如下--------\n\n')'''净化并输出链接。'''for i in list2:for j in i.split('\n'):if ('magnet:' in j) or ('thunder:' in j) or ('ed2k:' in j):list3.append(j)list4 = []for i in list3:for j in i.split(' '):if ('magnet:' in j) or ('thunder:' in j) or ('ed2k:' in j):list4.append(j)list4 = list(set(list4))for i in list4:print(str(i))print('\n')try:d.quit()os.system('pause')time.sleep(10000)except Exception as e:print(e)time.sleep(100)if __name__ == '__main__':try:name = input('请输入电影名称:')start_crawl(name=name)except Exception as e:print(e)time.sleep(100)

效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大概有一百多条连接,其中八成能用

在这里插入图片描述

本文若对你有帮助,请留下一个赞激励我……
如有不足之处,欢迎评论区指正……

http://chatgpt.dhexx.cn/article/heZKATsa.shtml

相关文章

作为一名爬虫人如何实现千万级数据爬取?

爬虫人,爬虫魂!爬虫路上莫乱行 爬虫门槛不高,高就高在往后余生的每一次实操都随时会让你崩溃 在这个大数据智能时代,数据就是金钱!所以越来越多的企业都很重视数据,然后通过爬虫技术等手段获取一些公开数据,为公司业务及项目进行赋能 在原始资本积累的初期,使用一些低…

爬虫攻守道 - 2023最新 - JS逆向 - Python Scrapy实现 - 爬取某天气网站历史数据

目录 背景介绍 网站分析 第1步:找到网页源代码 第2步:分析网页源代码 Python 实现 成果展示 后续 Todo 背景介绍 今天这篇文章,3个目的,1个是自己记录,1个是给大家分享,还有1个是向这个被爬网站的前…

如何使用爬虫一键批量采集新浪微博内容

信息时代如何真正做到,秀才不出门,能知天下事。不知道你们用的是啥,反正小喵我用的是微博。现在微博上新闻是多的不得了,国家大事,社会日常,娱乐新闻。微博热搜上随便一个话题都可以引起网民们的激烈讨论。…

scrapy爬虫实战——米哈游官网数据爬取

项目总览 前言项目建立爬虫代码编写爬虫运行导出到Excel后记 前言 scrapy是一个强大的爬虫框架,熟练地使用它几乎可以随心所欲地抓取任何网页上想要获得的数据。笔者初学爬虫,需要项目练手,适逢有不少朋友热衷于《原神》这款由米哈游开发的游…

一个神器,大幅提升爬虫爬取效率!

这是「进击的Coder」的第 575 篇技术分享 作者:崔庆才 在做爬虫的时候,我们往往可能这些情况: 网站比较复杂,会碰到很多重复请求。有时候爬虫意外中断了,但我们没有保存爬取状态,再次运行就需要重新爬取。 …

python爬虫基本功(一)--初识python爬虫与爬虫学习路径

大家好,这里是Kaiser。👏👏今天想给大家介绍下python爬虫的知识,我将与大家一起去揭开python爬虫的神秘面纱,字不多敲,让我们进入今天的主题:初识python爬虫。 文章目录 1️⃣什么是爬虫2️⃣爬…

神箭手 爬虫操作(1)

今天有一个任务,是要将微博用户的昵称从数据库导入到神箭手中。 以前一直是手动操作,现在有一个需求是要直接导入到设置中。 数据库使用的是mysql,数据库连接使用的是JDBCtemplate,使用spring构建,还要用到神箭手的S…

如何在神箭手云爬虫上写爬虫

摘要 上一篇博客跟大家详细介绍了如何写出《黄焖鸡米饭是怎么火起来的》这样的数据分析类的文章,相信很多人都对数据来源也就是如何爬取到黄焖鸡米饭商家信息很感兴趣。那么今天我就跟大家具体讲一讲怎么使用神箭手云爬虫写爬虫,以上篇博客的…

神箭手云爬虫平台 如何在1小时内编写简单爬虫

既然你来到了这里,想必你肯定已经知道了神箭手云爬虫平台是干什么的,目的也是非常的明确。 那么接下来的过程中,我将给你演示如何在最快时间内编写一个简单的爬虫,每一个属性的讲解,将会让你一路顺风。 demo项目GitHu…

神箭手云爬虫工具

title: 神箭手云爬虫 categories: 神箭手 tags:爬虫 分为: 入口页,帮助页,内容页 入口页: scanUrl 爬虫网页的入口 帮助页:helperurl 一帮包含大量的内容页(列表),多数情况下事业…

JS求绝对值

微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 需求,一个变量,需要判断它的值为负数时不能小于-20,正数也不能小于20,这个时候就需要用到求绝对值了。 Math.abs(num) > 求绝对值 使用示例&#xf…

javascript:求绝对值最小的数

问题来源:http://androidguy.blog.51cto.com/974126/1129543 有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂…

力扣 -----最小绝对值(JavaScript解法)

一、题目描述 二、示例 三、解题思路 先进行一个排序,然后使用双指针,依次进行比较,将比较的值进行存储,最小值改变的话,数组置空,最小值改变,如果和最小值相等的话直接push。我刚开始写的排序…

python3 绝对值_python3对序列求绝对值

原博文 2018-11-08 11:27 − http://www.cnblogs.com/itdyb/p/5731804.html 一开始我是这样写的,据说这样写python2是可以的: myList [-1,2,-3,4,-5,6]absList map(abs, myList) &... 0 1936 相关推荐 2019-12-23 10:33 − ## Python3使用sud…

【前端】JavaScript基础(二)

目录 一、内置对象 Math对象 Data日期 数组对象 字符串对象 字符串的不可变 根据字符返回位置 根据位置返回字符(重点) 字符串基本方法(重点) 字符串的替换与转换 二、简单类型和复杂类型 简单类型传参 复杂类型传参 一、内…

LeetCode 任意子数组和绝对值的最大值(JavaScript)

这道题目,我是通过看题解,然后通过自己思考才写出来的,第一次写博客,如果有不好之处,请谅解。 写这个题目之前,我们先了解一下前缀和,通过下面例子,或许你就明白了什么是前缀和了。…

常用JavaScript控制结构语句,绝对值,累加,阶乘,循环

计算一个数的绝对值 function abs(x) {if (x > 0) {return x;} else {return -x;} } console.log(abs(10) abs(-10)); //>true计算数组元素之和 let arr [1, 3, 5];function sum(array) {let sum 0;for (let x of array) { //循环数组把每个元素赋给xsum x;}return…

02-Node.js基础(一)

目录 一、什么是Node.js二、Node.js在软件架构中的地位三、Node.js 可以做什么(作用)浏览器端的 JavaScriptNode端的JavaScript 四、Node.js APIsWeb端APINode.js端APIWeb端JS与Node端JS对比 五、安装 Node.js第一步:在官网下载 Node.js 安装…

vue取绝对值

先放效果&#xff1a; 代码 <template><el-input v-model"num" placeholder"请输入数字" /><el-button type"primary" click"changeNum">取绝对值</el-button> </template> import { ref } from &quo…