小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。
使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/
(注)-i 后面是pip使用临时清华源下载 比较快 使用pip原来的源很慢所以做了一个换源处理
chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html找到与自己的谷歌游览器对应版本的版本版本对应关系这篇文章里面有:https://blog.csdn.net/BinGISer/article/details/88559532
京东流程。。。淘宝类似(就是多了一个登录验证)
一,要找到商场地址:https://www.jd.com/
二,模拟正常的查询(正常查询商品步骤:输入商品名,点击搜索,下拉查看商品,点击下一页查看更多的商品)怎么来的我不去做详细的说明(懒得打字,能用就行,懒得去做文章教人,实在想学习加我扣扣讨论)直接上代码,能看懂就看,看不懂的可以加扣扣:2511217211一起讨论(加好友验证备注:讨论)
爬取京东商品信息代码:
from selenium import webdriver
from time import sleep
import re
import os
# 搜索商品
def search_products():
# 输入商品名字
driver.find_element_by_xpath('//*[@id="key"]').send_keys(keyword)
# 点击搜索
driver.find_element_by_xpath('//*[@class="form"]/button').click()
sleep(10)
token = driver.find_element_by_xpath('//*[@id="J_bottomPage"]/span[2]/em[1]/b').text
# 0代表所有匹配到的数字
token = int(re.compile('(\d+)').search(token).group(1))
# 返回总页数
return token
# 下拉下滑条,加载数据
def drop_down():
for x in range(1, 11, 2):
sleep(1)
j = x / 10
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
driver.execute_script(js)
# 获取商品信息
def get_product():
lis = driver.find_elements_by_xpath('//*[@class="gl-warp clearfix"]/li[@class="gl-item"]')
for li in lis:
price = li.find_element_by_xpath('.//div[@class="p-price"]/strong/i').text + '元'
info = li.find_element_by_xpath('.//div[@class="p-name"]/a/em').text + li.find_element_by_xpath(
'.//div[@class="p-name"]/a').get_attribute('title')
p_commit = li.find_element_by_xpath('.//div[@class="p-commit"]/strong/a').text
p_shopnum = li.find_element_by_xpath('.//div[@class="p-shopnum"]/*').text
p_img = li.find_element_by_xpath('.//div[@class="p-img"]/a/img').get_attribute('src')
print(info, price, p_commit, p_shopnum, p_img, sep='|')
# 翻页
def next_page():
token = search_products()
num = 1
while (num != token):
driver.get('https://search.jd.com/Search?keyword={}&page={}'.format(keyword, 2 * num - 1))
driver.implicitly_wait(10)
num += 1
drop_down()
get_product()
if __name__ == "__main__":
keyword = input('输入你想查找的商品名字:')
driver_path = os.path.abspath(os.path.join(os.getcwd(), "..")) + "/Drive/chromedriver.exe"
driver = webdriver.Chrome(driver_path)
# 窗口最大化,防止数据丢失
driver.maximize_window()
driver.get('https://www.jd.com/')
next_page()
爬取淘宝信息的代码:
from selenium import webdriver
from time import sleep
import re
import os
# 搜索商品
def search_products():
driver.find_element_by_xpath('//*[@id="q"]').send_keys(keyword)
driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
sleep(10)
token = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text
# 0代表所有匹配到的数字
token = int(re.compile('(\d+)').search(token).group(1))
return token
# 下拉下滑条,加载数据
def drop_down():
for x in range(1, 11, 2):
sleep(1)
j = x / 10
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
driver.execute_script(js)
# 获取商品信息
def get_product():
lis = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
for li in lis:
info = li.find_element_by_xpath('.//div[@class="row row-2 title"]').text
price = li.find_element_by_xpath('.//a[@class="J_ClickStat"]').get_attribute('trace-price') + '元'
deal = li.find_element_by_xpath('.//div[@class="deal-cnt"]').text
image = li.find_element_by_xpath('.//div[@class="pic"]/a/img').get_attribute('src')
name = li.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text
site = li.find_element_by_xpath('.//div[@class="location"]').text
print(info, price, deal, name, site, image, sep='|')
# 翻页
def next_page():
token = search_products()
num = 0
while (num != token):
driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, 44 * num))
driver.implicitly_wait(10)
num += 1
drop_down()
get_product()
if __name__ == "__main__":
keyword = input('输入你想查找的商品名字:')
driver_path = os.path.abspath(os.path.join(os.getcwd(), ".."))+"/Drive/chromedriver.exe"
driver = webdriver.Chrome(driver_path)
# 窗口最大化,防止数据丢失
driver.maximize_window()
driver.get('https://www.taobao.com/')
next_page()