动态网页的信息爬取(Python+Selenium)
发布时间
阅读量:
阅读量
文章目录
-
- 一、Selenium
- 二、自动化测试
- 三、爬取京东网站上的华为手机信息
一、Selenium
1.1 简介
Selenium是一种用于网页自动化的测试工具。最初是为了实现网站自动化测试功能而设计的一种工具类软件。类似于我们在游戏中使用的快捷键辅助工具,Selenium能够根据预设指令自动执行各项操作。值得注意的是,Selenium可以直接运行于浏览器环境中,并且能够支持所有主流的主要浏览器(包括PhantomJS这类无界面的浏览器)。
Selenium 能够按照指令自动生成并展示网页内容,并能够收集所需的信息;此外还可以实现页面截屏的功能;同时也可以检测网站上的特定操作是否执行。
Selenium本身不具备内置浏览器功能,并不能直接执行通用的网页浏览操作。然而,在某些情况下我们需要将其嵌入到代码环境中以便运行。因此,我们可以选择PhantomJS等工具来替代传统的浏览器软件。
1.2 下载
可以通过pip命令安装selenium库或者使用conda安装该库。需要注意的是,在实际应用中这通常会涉及下载并配置相应的驱动程序以支持其功能。
二、自动化测试
将包含头文件的部分加载至网页中,并将其添加至系统环境变量中。但经过尝试发现直接加载并没有帮助。而为了避免这样的问题,在此采取了固定路径的方式。
from selenium import webdriver
driver=webdriver.Chrome('D:/下载/chromedriver_win32/chromedriver.exe')
#进入网页
driver.get("https://www.baidu.com/")

在Web浏览器环境中调用开发者工具以获取代码内容,并通过以下步骤操作:首先定位搜索框元素并获取其ID属性;接着右键点击该元素并选择检查选项;最后即可获取该元素对应的ID。

使用id来找到这个元素
from selenium import webdriver
# 打开一个Chrome浏览器,executable_path是Chrome浏览器驱动的路径
driver = webdriver.Chrome(executable_path=r'D:/下载/chromedriver_win32/chromedriver.exe')
driver.get("https://www.baidu.com/")
p_input=driver.find_element_by_id('kw')
print(p_input)
print(p_input.location)
print(p_input.size)
print(p_input.send_keys('星球'))
print(p_input.text)

同样右键百度一下,点击检查,查看它的id

p_btn = driver.find_element_by_id('su')
p_btn.click()
三、爬取京东网站上的华为手机信息
查看网站首页,输入框id和搜索按钮

右击手机,发现信息都在J_goodsList下面

查看每一部手机及li标签下具体内容


可以看到价格p-price之类的
代码:
import time
import csv
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from lxml import etree
driver = webdriver.Chrome(executable_path=r'D:/下载/chromedriver_win32/chromedriver.exe')
# 京东所在网站
driver.get("https://www.jd.com/")
p_input = driver.find_element_by_id('key')# 找到输入框输入
p_input.send_keys('p40') # 输入需要查找的关键字
time.sleep(1)
button=driver.find_element_by_class_name("button").click()# 点击搜素按钮
time.sleep(1)
all_book_info = []
num=200
head=['手机名', '价格']
#csv文件的路径和名字
path='D:/下载/chromedriver_win32/手机.csv'
def write_csv(head,all_book_info,path):
with open(path, 'w', newline='',encoding='utf-8') as file:
fileWriter =csv.writer(file)
fileWriter.writerow(head)
fileWriter.writerows(all_book_info)
# 爬取一页
def get_onePage_info(web,num):
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
time.sleep(2)
page_text =driver.page_source
# with open('3-.html', 'w', encoding='utf-8')as fp:
# fp.write(page_text)
# 进行解析
tree = etree.HTML(page_text)
li_list = tree.xpath('//li[contains(@class,"gl-item")]')
for li in li_list:
num=num-1
book_infos = []
book_name = ''.join(li.xpath('.//div[@class="p-name p-name-type-2"]/a/em/text()')) # 书名
book_infos.append(book_name)
price = '¥' + li.xpath('.//div[@class="p-price"]/strong/i/text()')[0] # 价格
book_infos.append(price)
# if len(store_span) > 0:
# store = store_span[0]
# else:
# store = '无'
all_book_info.append(book_infos)
if num==0:
break
return num
while num!=0:
num=get_onePage_info(driver,num)
driver.find_element_by_class_name('pn-next').click() # 点击下一页
time.sleep(2)
write_csv(head,all_book_info,path)
driver.close()

全部评论 (0)
还没有任何评论哟~
