You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
4.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# ip代理.py
这段代码是一个Python脚本它使用Selenium WebDriver和BeautifulSoup库来自动化爬取网页上的免费代理IP地址并将爬取到的IP地址及其端口保存到JSON和TXT文件中。以下是该脚本实现的主要步骤和方法
1. **设置无头模式**:使用`Options`类设置Edge浏览器以无头模式运行这样浏览器就不会显示图形界面。
2. **实例化WebDriver**创建一个Edge浏览器实例用于后续的网页操作。
3. **初始化变量**初始化了用于存储IP地址、端口和代理的列表和字典。
4. **循环爬取**:使用`for`循环和`range`函数遍历不同的子页面(这里假设是分页),并对每个页面进行操作。
5. **获取页面源代码**:使用`driver.page_source`获取当前页面的HTML源代码。
6. **解析HTML**使用BeautifulSoup解析HTML内容以便提取所需的数据。
7. **提取IP和端口**通过CSS选择器定位到包含IP和端口的`td`标签,并提取文本。
8. **添加到列表和字典**将提取到的IP和端口分别添加到列表和字典中。
9. **打印进度**:打印出当前加载的代理数量,以显示进度。
10. **构建代理列表**遍历IP列表为每个IP构建一个包含HTTP代理的字典并添加到代理列表中。
11. **写入JSON文件**:使用`json.dump`将代理列表以格式化的JSON格式写入文件。
12. **写入TXT文件**:打开一个文本文件,将每个代理以字符串形式写入,并在每个代理后添加逗号和换行符。
13. **关闭WebDriver**:使用`driver.quit()`关闭浏览器实例,释放资源。
14. **延时**`time.sleep(999)`会使程序暂停999秒但由于`driver.quit()`已经关闭了浏览器,所以这一行实际上不会执行。
# spiders.py
这段代码是一个使用Python编写的自动化脚本它使用Selenium WebDriver和BeautifulSoup库来自动化Web浏览器操作目的是从豆瓣电影网站爬取特定条件地区和年代下的电影链接并将这些链接保存到Excel文件中。以下是该脚本实现的主要步骤
1. **初始化数据库连接** (`create_engine`): 使用 SQLAlchemy 创建数据库连接,这里连接到一个名为 `dbmovie` 的MySQL数据库。
2. **spider 类**: 定义了一个爬虫对象,包含多个方法用于爬取和处理电影数据。
3. **初始化方法 `__init__`**: 初始化时读取一个Excel文件来获取要爬取的电影网站URL列表并设置请求头和代理。
4. **请求头 `request_headers`**: 生成随机的User-Agent来模拟浏览器请求避免被网站识别为爬虫。
5. **初始化数据库 `init`**: 检查是否存在用于存储临时数据的CSV文件和记录爬取进度的文本文件如果不存在则创建它们。同时尝试创建一个数据库表 `movie` 来存储爬取的数据。
6. **获取和设置页面索引 `get_page``set_page`**: 用于记录爬虫当前爬取到的页面索引,以便下次可以从上次停止的地方继续爬取。
7. **主爬虫方法 `spiderMain`**: 这是执行爬取的核心方法。它循环遍历URL列表对每个URL发送HTTP请求并解析返回的页面内容。
8. **解析页面内容**: 使用 `lxml.etree` 解析HTML文档提取电影的导演、评分、名称、演员、封面、详情链接、年份、类型、国家、语言、上映时间、片长、短评个数、星级占比、简介和短评等信息。
9. **保存到CSV `save_to_csv`**: 将爬取的数据追加到CSV文件中。
10. **保存到SQL数据库 `save_to_sql`**: 将CSV文件中的数据导入到数据库中。
11. **清除CSV文件 `clear_csv`**: 删除CSV文件中的缺失值和重复值然后保存到一个新的CSV文件中并导入到数据库。
12. **删除CSV文件 `delete_csv_file`**: 删除用于临时存储爬取数据的CSV文件。
13. **代理池优化 `Optimize`**: 一个导入的模块用于管理和优化IP代理池但具体的实现细节没有在代码中给出。
14. **异常处理**: 在 `spiderMain` 方法中,使用 `try-except` 块来捕获和处理可能出现的异常,例如网络错误或解析错误。
15. **重试机制**: 如果在爬取过程中遇到错误,程序会重试,最多重试 `max_retries` 次。
16. ***\*main\** 块**: 如果这个脚本作为主程序运行,它将创建一个 `spider` 对象,初始化数据库,并开始爬取过程。