|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 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` 对象,初始化数据库,并开始爬取过程。
|