动态网页抓取(京东网站上的华为手机信息查看网站首页的文章目录 )
优采云 发布时间: 2021-12-20 02:14动态网页抓取(京东网站上的华为手机信息查看网站首页的文章目录
)
文章内容
一、硒
1.1 简介
Selenium 是一个 Web 自动化测试工具。它最初是为 网站 自动化测试而开发的。类型就像我们用来玩游戏的按钮向导。可根据指定指令自动运行。不同的是,Selenium 可以直接在浏览器中运行。它支持所有主流浏览器(包括 PhantomJS 等非接口浏览器)。
Selenium 可以让浏览器根据我们的指令自动加载页面,获取需要的数据,甚至可以对页面进行截图,或者判断是否对网站 进行了某些操作。
Selenium 没有浏览器,不支持浏览器的功能。需要配合第三方浏览器使用。但是我们有时需要让它嵌入到代码中运行,所以我们可以使用一个叫做 PhantomJS 的工具来代替真正的浏览器。
1.2 下载
可以直接用pip install selenium或者conda install selenium下载,但是要使用需要下载对应的浏览器驱动
二、自动化测试
引入头文件进入网页,驱动需要添加到环境变量中,但是添加好像没用,这里用的是绝对路径
from selenium import webdriver
driver=webdriver.Chrome('D:/下载/chromedriver_win32/chromedriver.exe')
#进入网页
driver.get("https://www.baidu.com/")
在浏览器中,使用开发者工具,查看代码,定位到搜索框的id,右键搜索框,点击check,可以看到搜索框的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)
同理,在百度上右击,点击check,查看它的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()