python爬虫主要思路:
1.选取目标网页:获得链接,观察源代码构成。
2.用request库的get方法取得源代码。其中header参数用于伪装正常浏览器发送请求,proxies用于设置访问代理,url为目标网站
3.获取text后用BS对象查找相应内容标签,要注意利用id,class名的特殊性。
4.获取到相应内容标签后需提取内容:正则或其他方法。如a标签中的href内容可用href=a['href]提取,img标签中的src可用src=a['src‘]提取,左边为变量名,可随意。
5.提取到链接后用with写入文件较稳定便捷,文本内容用文本形式w写入,图片内容用二进制形式wb写入
目标网站:
https://www.pixiv.net/users/911893
若直接用request获取,只能得到部分内容,原因是该网站有登录保护。
所以采用selenium自动化打开网页获取源代码。鉴于edge太过流氓,不好回溯版本,以至于webdriver版本远落后于edge版本,故采用chrome。
自动化目的:登录pixiv主网站,再跳转至目标网站,获取源代码。
点击查看代码
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
from bs4 import BeautifulSoup
import time
import re
# 创建Chrome WebDriver实例
driver = webdriver.Chrome()
# 打开网页
driver.get("https://www.pixiv.net")
# 根据class名称找到登录链接元素
login_link = driver.find_element(By.CLASS_NAME, "signup-form__submit--login")
# 点击登录链接
login_link.click()
email_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'input[placeholder="邮箱地址或pixiv ID"]'))
)
# 输入邮箱地址或Pixiv ID
email_input.send_keys("your_username")
# 找到密码输入框
password_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, 'input[placeholder="密码"]'))
)
# 输入密码
password_input.send_keys("your_password")
# 点击登录按钮
# 点击登录按钮
login_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '.sc-bdnxRM.jvCTkj.sc-dlnjwi.klNrDe.sc-2o1uwj-10.jQmNGr.sc-2o1uwj-10.jQmNGr'))
)
login_button.click()
time.sleep(5)
driver.get("https://www.pixiv.net/users/911893/artworks")
time.sleep(5)
page=driver.page_source
soup=BeautifulSoup(page,'html.parser')