首先需要安装Python的selenium:
pip install selenium
然后需要安装chromedriver驱动器,chromedriver下载地址:
http://chromedriver.storage.googleapis.com/index.html
下载后解压即可:
本例中爬取的网站站点具有分页特性。原理是先把分页的数据循环读取,读到每一个分页内容后,解析里面包含的子页面,再循环访问。
特意去掉了本例具体爬取的网站站点名称。
import time
import requests
from selenium import webdriver
import random
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
TIME = 5
#访问具体链接地址。
def http_get(page_number, page_id):
option = webdriver.ChromeOptions()
option.set_headless() # 不打开浏览器窗口。
browser = webdriver.Chrome(
options=option, executable_path=r"D:\program\chromedriver_win32\chromedriver.exe")
browser.set_page_load_timeout(60) # 页面加载最大时间为60秒,否则超时。
try:
addr = "https://*******************/details/"+str(page_id)
browser.get(addr)
t = browser.title
time.sleep(random.randint(0, TIME))
browser.close()
logging.info("访问第"+str(page_number)+"页-"+t+",结束 - "+addr)
except:
logging.debug("访问第"+str(page_number)+"页-,错误-"+addr)
browser.close()
#page_number,分页的编码。
def htttp_page(page_number):
u = "https://**********************/list/"+str(page_number)+"?"
r = requests.get(u)
logging.info("访问第"+str(page_number)+"页")
r.raise_for_status()
tag = "data-articleid="
parts = r.text.split()
ids = []
for part in parts:
if part.startswith(tag):
id = part.split(r'"')[1]
ids.append(id)
random.shuffle(ids)
for id in ids:
http_get(page_number, id)
time.sleep(random.randint(0, TIME))
while True:
array = list(range(1, 41))
random.shuffle(array)
print("随机后的页码:")
print(array)
for i in array:
htttp_page(i)
time.sleep(random.randint(0, TIME))
注意:本文是研究性质,不是用来DO EVIL