动态网页抓取(京东网站上的华为手机信息查看网站首页的文章目录 )

优采云 发布时间: 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()

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线