工作需要然后就开始自学了一下。
Python爬虫可以用于解决以下问题:
-
数据采集:从互联网上抓取数据,包括文本、图片、音频、视频等,可以用于各种目的,例如建立数据集、分析市场趋势、获取最新新闻等。
-
网站监测:定期检查网站的状态和内容更新情况,例如检测网站是否正常运行、检测指定网页是否发生变化等。
-
数据分析:通过爬取网页上的数据,进行数据清洗、整理和分析,可以得出一些有用的信息和结论。
-
自动化操作:通过模拟人的操作行为,自动登录网站、填写表单、提交数据等,可以实现自动化的任务,例如批量下载文件、批量发送邮件等。
-
SEO优化:爬取搜索引擎结果页面,分析关键词排名、竞争对手等信息,用于优化网站内容和策略,提高搜索引擎排名。
-
网络安全:爬取网站的漏洞信息,进行漏洞扫描和安全评估,帮助网站提高安全性。
总之,Python爬虫可以帮助我们获取、处理和分析网页上的各种信息,为我们解决各种问题提供了便利。
最简单那就是这样
调用浏览器来爬取租赁网站的商品数据,可以使用Python的Selenium库。
首先,确保已经安装了Selenium库和对应的浏览器驱动程序。根据使用的浏览器,下载对应的驱动程序,并将其添加到系统的PATH中。
接下来,可以使用以下代码来调用浏览器并进行自动化操作:
from selenium import webdriver
# 设置浏览器驱动程序路径
driver_path = "path_to_driver.exe" # 将path_to_driver.exe替换为实际的驱动程序路径
# 创建浏览器实例
driver = webdriver.Chrome(executable_path=driver_path) # 使用Chrome浏览器,也可以使用其他浏览器
# 打开租赁网站
driver.get("https://www.example.com") # 将https://www.example.com替换为目标租赁网站的URL
# 进行登录等操作(根据具体网站的登录方式进行操作)
# 执行爬取操作(根据具体网站的 HTML 结构和爬取需求进行操作)
# 关闭浏览器
driver.quit()
在代码中,路径 path_to_driver.exe
需要替换为实际的驱动程序路径。另外,https://www.example.com
需要替换为目标租赁网站的URL。根据具体网站的登录方式和HTML结构,可以通过操作浏览器进行登录和爬取操作。
需要注意的是,使用浏览器进行爬取会比普通的HTTP请求耗费更多的资源和时间,所以在设计爬虫时需要注意控制爬取速度,并合理利用浏览器的缓存等机制,以减少重复请求。另外,也要遵守网站的爬虫协议,避免给网站造成不必要的负担。
然后我自己写了一个就是这样的,基本上都有注释,很容易看的懂得了
# -*- coding: utf-8 -*-
import logging
import time
import csv
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')#%(asctime)s 将会是日志条目的时间戳。%(levelname)s 将会是日志级别(例如 'INFO'、'WARNING'、'ERROR' 等)。%(message)s 就是实际的日志信息。
KEY_WORD = input('请输入你想要获取商品数据: ') #把商品名称输入到搜索框
CSV_FILE = f'易点云{KEY_WORD}商品数据.csv' #创建csv文件
PAGE_COUNT = 1 # 要爬取的页数
def drop_down(driver: webdriver.Chrome) -> None:
"""执行页面滚动的操作
for x in range(1, 12, 2): - 这一行创建了一个从1开始,以2为步长的序列,所以它会遍历1, 3, 5, 7, 9, 11。
time.sleep(1) - 这一行使程序暂停1秒。
j = x / 9 - 这一行计算x除以9的结果,并存储在变量j中。
js = f'document.documentElement.scrollTop = document.documentElement.scrollHeight * {j}' - 这一行创建了一个JavaScript字符串,该字符串设置文档的滚动位置。
driver.execute_script(js) - 这一行执行上述JavaScript代码。"""
for x in range(1, 12, 2):
time.sleep(1)
j = x / 9
js = f'document.documentElement.scrollTop = document.documentElement.scrollHeight * {j}'
driver.execute_script(js)
def get_shop_info(driver: webdriver.Chrome, csv_writer: csv.DictWriter) -> None:
wait = WebDriverWait(driver, 10)
try:
ul = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.pro-list-con ul'))) #获取页面pro-list-con下的多个ul
except Exception as e:
logging.error(f'Failed to get ul element: {e}') #获取不到页面pro-list-con下的多个ul,就抛出错误
return
else:
lis = ul.find_elements(By.CSS_SELECTOR, 'li') #获取页面pro-list-con下的多个ul下的li
for li in lis:
try:
title = li.find_element(By.CSS_SELECTOR, 'h3').text #.replace('\n', '')把换行变成空格 #获取li下的商品名称
price = li.find_element(By.CSS_SELECTOR, '.price').text #获取商品价格
dit = {
'商品标题': title,
'商品价格': price,
}
csv_writer.writerow(dit)
logging.info(f'Successfully saved product info: {title} | {price}') #把商品名称,价格写进csv文件
except Exception as e:
logging.error(f'Failed to get product info: {e}')
def main():
csv_fields = ['商品标题', '商品价格'] #定义csv文件列名
with open(CSV_FILE, mode='a', encoding='utf-8', newline='') as f: #打开斌创建csv文件
csv_writer = csv.DictWriter(f, fieldnames=csv_fields)
csv_writer.writeheader() #写入列名
driver = webdriver.Chrome() #此次路径为chrome.exe路径
# # 设置代理IP地址和端口
# proxy_ip = "http://proxy.example.com:8080"
#
# # 创建一个requests session对象,并设置代理
# session = requests.Session()
# session.proxies = {'http': proxy_ip, 'https': proxy_ip}
# # 发送HTTP请求获取网页内容
# response = session.get("https://example.com")
driver.get('https://www.edianyun.com/index') # 访问一个网址 打开浏览器 打开网址
driver.find_element(By.CLASS_NAME, 'hsearch-text').send_keys(KEY_WORD) # 找到输入框标签
driver.find_element(By.CLASS_NAME, 'hsearch-but').click() # 找到搜索按钮 进行点击
time.sleep(3)
for page in range(1, PAGE_COUNT + 1):
logging.info(f'Start crawling page {page}') #正在爬取第几页数据
drop_down(driver)
get_shop_info(driver, csv_writer)
try:
next_btn = driver.find_element(By.CLASS_NAME, 'icon-page-right') #点击下一页按钮
next_btn.click()
except Exception as e:
logging.error(f'Failed to click next button: {e}')
break
else:
time.sleep(3)
driver.quit()
logging.info(f'Successfully saved all product info to {CSV_FILE}')
if __name__ == '__main__':
main()
运行结果是这样的
同时会在目录下生成一个csv文件,存数据
第一次写,不太懂,见笑了