- 一,准备
- 二,代码
- 三,爬取指定网页http://quotes.toscrape.com/js/的名言
- 四,Selenium:requests+Selenum爬取京东物品
- 五,实验结果
- 六,总结
- 七,参考
安装本次实验所需安装包
使用anaconda prompt
pip install selenium
然后去下载驱动,根据不同的浏览器的话需要下载不同的驱动,这里推荐Chrome
驱动下载网址:https://npm.taobao.org/mirrors/chromedriver/
下载之后是一个exe文件,然后将这个文件的路径添加到环境变量
运行结果我就放在最后面的视频里面了,就不一一截屏了
打开浏览器,并打开百度
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) #进入网页 driver.get("https://www.baidu.com/")
右键,对百度页面进行检查
可以发现搜索框的id是kw
所以就简单了
在搜索框里面输入
p_input = driver.find_element_by_id("kw") p_input.send_keys('原神')
但是输入之后还需要回车就很麻烦,所以继续
检查网页找到按钮百度一下的id,为su
#点击搜索按钮 p_btn=driver.find_element_by_id('su') p_btn.click()三,爬取指定网页http://quotes.toscrape.com/js/的名言
同样,先打开网页,找到名言的id,不用想,应该是text,毕竟是text文本格式的。
所以直接代码
from bs4 import BeautifulSoup as bs from selenium import webdriver import csv from selenium.webdriver.chrome.options import Options from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快 from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('http://quotes.toscrape.com/js/') #定义csv表头 quote_head=['名言','作者'] #csv文件的路径和名字 quote_path='C:\Users\hp\Desktop\pachong.csv' #存放内容的列表 quote_content=[] ''' function_name:write_csv parameters: csv_head,csv_content,csv_path csv_head: the csv file head csv_content: the csv file content,the number of columns equal to length of csv_head csv_path: the csv file route ''' def write_csv(csv_head,csv_content,csv_path): with open(csv_path, 'w', newline='') as file: fileWriter =csv.writer(file) fileWriter.writerow(csv_head) fileWriter.writerows(csv_content) print('爬取信息成功') ### #可以用find_elements_by_class_name获取所有含这个元素的集合(列表也有可能) #然后把这个提取出来之后再用继续提取 quote=driver.find_elements_by_class_name("quote") #将要收集的信息放在quote_content里 for i in tqdm(range(len(quote))): quote_text=quote[i].find_element_by_class_name("text") quote_author=quote[i].find_element_by_class_name("author") temp=[] temp.append(quote_text.text) temp.append(quote_author.text) quote_content.append(temp) write_csv(quote_head,quote_content,quote_path)
结果
代码
from selenium import webdriver import time import csv from tqdm import tqdm#在电脑终端上显示进度,使代码可视化进度加快 from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) #加载页面 driver.get("https://www.jd.com/") time.sleep(3) #定义存放图书信息的列表 goods_info_list=[] #爬取200本 goods_num=200 #定义表头 goods_head=['价格','名字','链接'] #csv文件的路径和名字 goods_path='C:\Users\hp\Desktop\pachong2.csv' #向输入框里输入Java p_input = driver.find_element_by_id("key") p_input.send_keys('抱枕') #button好像不能根据类名直接获取,先获取大的div,再获取按钮 from_filed=driver.find_element_by_class_name('form') s_btn=from_filed.find_element_by_tag_name('button') s_btn.click()#实现点击 #获取商品价格、名称、链接 def get_prince_and_name(goods): #直接用css定位元素 #获取价格 goods_price=goods.find_element_by_css_selector('div.p-price') #获取元素 goods_name=goods.find_element_by_css_selector('div.p-name') #获取链接 goods_herf=goods.find_element_by_css_selector('div.p-img>a').get_property('href') return goods_price,goods_name,goods_herf def drop_down(web_driver): #将滚动条调整至页面底部 web_driver.execute_script('window.scrollTo(0, document.body.scrollHeight)') time.sleep(3) #获取爬取一页 def crawl_a_page(web_driver,goods_num): #获取图书列表 drop_down(web_driver) goods_list=web_driver.find_elements_by_css_selector('div#J_goodsList>ul>li') #获取一个图书的价格、名字、链接 for i in tqdm(range(len(goods_list))): goods_num-=1 goods_price,goods_name,goods_herf=get_prince_and_name(goods_list[i]) goods=[] goods.append(goods_price.text) goods.append(goods_name.text) goods.append(goods_herf) goods_info_list.append(goods) if goods_num==0: break return goods_num while goods_num!=0: goods_num=crawl_a_page(driver,goods_num) btn=driver.find_element_by_class_name('pn-next').click() time.sleep(1) write_csv(goods_head,goods_info_list,goods_path)五,实验结果
实验结果视频上传到了哔哩哔哩,网址是https://www.bilibili.com/video/BV1ta411r79R/
python爬取名言和商品信息
六,总结和静态网页一样查看网页结构,找到元素id或者利用相关函数得到元素,然后将信息获取,存储,差别不是很大
七,参考动态网页爬虫
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)