Maison interface Web js tutoriel Utilisez du sélénium pour capturer les informations sur les produits Taobao

Utilisez du sélénium pour capturer les informations sur les produits Taobao

Mar 23, 2018 pm 04:38 PM
selenium 信息 商品

Cette fois, je vais vous présenter l'utilisation du sélénium pour capturer les informations sur les produits Taobao. Quelles sont les précautions pour utiliser le sélénium pour capturer les informations sur les produits Taobao. Ce qui suit est un cas pratique, jetons un coup d'œil.

Les pages Taobao utilisent beaucoup de js pour charger les données, il est donc plus facile d'utiliser Selenium pour explorer. En tant qu'outil de test, Selenum est principalement utilisé avec les phantomjs du navigateur sans fenêtre.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

import re

from selenium import webdriver

from selenium.common.exceptions import TimeoutException

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from pyquery import PyQuery as pq

'''

wait.until()语句是selenum里面的显示等待,wait是一个WebDriverWait对象,它设置了等待时间,如果页面在等待时间内

没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,也可以说程序每隔xx秒看一眼,如果条件

成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

1.presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')

2.element_to_be_clickable 元素可点击

3.text_to_be_present_in_element 某个元素文本包含某文字

'''

# 定义一个无界面的浏览器

browser = webdriver.PhantomJS(

 service_args=[

  '--load-images=false',

  '--disk-cache=true'])

# 10s无响应就down掉

wait = WebDriverWait(browser, 10)

#虽然无界面但是必须要定义窗口

browser.set_window_size(1400, 900)

def search():

 '''

 此函数的作用为完成首页点击搜索的功能,替换标签可用于其他网页使用

 :return:

 '''

 print('正在搜索')

 try:

  #访问页面

  browser.get('https://www.taobao.com')

  # 选择到淘宝首页的输入框

  input = wait.until(

   EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))

  )

  #搜索的那个按钮

  submit = wait.until(EC.element_to_be_clickable(

   (By.CSS_SELECTOR, '#J_TSearchForm > p.search-button > button')))

  #send_key作为写到input的内容

  input.send_keys('面条')

  #执行点击搜索的操作

  submit.click()

  #查看到当前的页码一共是多少页

  total = wait.until(EC.presence_of_element_located(

   (By.CSS_SELECTOR, '#mainsrp-pager > p > p > p > p.total')))

  #获取所有的商品

  get_products()

  #返回总页数

  return total.text

 except TimeoutException:

  return search()

def next_page(page_number):

 '''

 翻页函数,

 :param page_number:

 :return:

 '''

 print('正在翻页', page_number)

 try:

  #这个是我们跳转页的输入框

  input = wait.until(EC.presence_of_element_located(

   (By.CSS_SELECTOR, '#mainsrp-pager > p > p > p > p.form > input')))

  #跳转时的确定按钮

  submit = wait.until(

   EC.element_to_be_clickable(

    (By.CSS_SELECTOR,

     '#mainsrp-pager > p > p > p > p.form > span.J_Submit')))

  #清除里面的数字

  input.clear()

  #重新输入数字

  input.send_keys(page_number)

  #选择并点击

  submit.click()

  #判断当前页是不是我们要现实的页

  wait.until(

   EC.text_to_be_present_in_element(

    (By.CSS_SELECTOR,

     '#mainsrp-pager > p > p > p > ul > li.item.active > span'),

    str(page_number)))

  #调用函数获取商品信息

  get_products()

 #捕捉超时,重新进入翻页的函数

 except TimeoutException:

  next_page(page_number)

def get_products():

 '''

 搜到页面信息在此函数在爬取我们需要的信息

 :return:

 '''

 #每一个商品标签,这里是加载出来以后才会拿网页源代码

 wait.until(EC.presence_of_element_located(

  (By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))

 #这里拿到的是整个网页源代码

 html = browser.page_source

 #pq解析网页源代码

 doc = pq(html)

 items = doc('#mainsrp-itemlist .items .item').items()

 for item in items:

  print(item)

  product = {

   'image': item.find('.pic .img').attr('src'),

   'price': item.find('.price').text(),

   'deal': item.find('.deal-cnt').text()[:-3],

   'title': item.find('.title').text(),

   'shop': item.find('.shop').text(),

   'location': item.find('.location').text()

  }

  print(product)

def main():

 try:

  #第一步搜索

  total = search()

  #int类型刚才找到的总页数标签,作为跳出循环的条件

  total = int(re.compile('(\d+)').search(total).group(1))

  #只要后面还有就继续爬,继续翻页

  for i in range(2, total + 1):

   next_page(i)

 except Exception:

  print('出错啦')

 finally:

  #关闭浏览器

  browser.close()

if name == 'main':

 main()

Copier après la connexion

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée de l'utilisation d'Express et de Koa2

Imitation JS de l'interface de la page d'accueil mobile Toutiao

Le type d'énumération Vue implémente HTML

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer les informations sur l'auteur et la dernière modification dans Microsoft Word Comment supprimer les informations sur l'auteur et la dernière modification dans Microsoft Word Apr 15, 2023 am 11:43 AM

Comment supprimer les informations sur l'auteur et la dernière modification dans Microsoft Word

Apprenez à installer Selenium facilement à l'aide de PyCharm : guide d'installation et de configuration de PyCharm Apprenez à installer Selenium facilement à l'aide de PyCharm : guide d'installation et de configuration de PyCharm Jan 04, 2024 pm 09:48 PM

Apprenez à installer Selenium facilement à l'aide de PyCharm : guide d'installation et de configuration de PyCharm

Comment partager les coordonnées avec NameDrop : guide pratique pour iOS 17 Comment partager les coordonnées avec NameDrop : guide pratique pour iOS 17 Sep 16, 2023 pm 06:09 PM

Comment partager les coordonnées avec NameDrop : guide pratique pour iOS 17

Comment obtenir le GPU sous Windows 11 et vérifier les détails de la carte graphique Comment obtenir le GPU sous Windows 11 et vérifier les détails de la carte graphique Nov 07, 2023 am 11:21 AM

Comment obtenir le GPU sous Windows 11 et vérifier les détails de la carte graphique

Développement Laravel : Comment utiliser Laravel Dusk et Selenium pour tester le navigateur ? Développement Laravel : Comment utiliser Laravel Dusk et Selenium pour tester le navigateur ? Jun 14, 2023 pm 01:53 PM

Développement Laravel : Comment utiliser Laravel Dusk et Selenium pour tester le navigateur ?

L'algorithme NeRF à vue unique S^3-NeRF utilise des informations multi-éclairage pour restaurer la géométrie de la scène et les informations sur les matériaux. L'algorithme NeRF à vue unique S^3-NeRF utilise des informations multi-éclairage pour restaurer la géométrie de la scène et les informations sur les matériaux. Apr 13, 2023 am 10:58 AM

L'algorithme NeRF à vue unique S^3-NeRF utilise des informations multi-éclairage pour restaurer la géométrie de la scène et les informations sur les matériaux.

Utilisez la combinaison de Java, Selenium et OpenCV pour résoudre le problème de la vérification des curseurs dans les tests automatisés. Utilisez la combinaison de Java, Selenium et OpenCV pour résoudre le problème de la vérification des curseurs dans les tests automatisés. May 08, 2023 pm 08:16 PM

Utilisez la combinaison de Java, Selenium et OpenCV pour résoudre le problème de la vérification des curseurs dans les tests automatisés.

Comment identifier l'authenticité des produits Dewu ? Méthodes pour identifier l'authenticité ? Comment identifier l'authenticité des produits Dewu ? Méthodes pour identifier l'authenticité ? Mar 12, 2024 pm 12:16 PM

Comment identifier l'authenticité des produits Dewu ? Méthodes pour identifier l'authenticité ?

See all articles