2017-08-10 123 views
2

我想刮一个网页:https://www.justdial.com/Mumbai/Dairy-Product-Retailers-in-Thane/nct-10152687Beautifulsoup - 刮网页 - 动态加载

我需要所有的商店名称的数据,TEL-NUM和他们的地址

但我只能做到这一点高达10 原因加载其他项目需要滚动网页

我的代码:

import requests 
import bs4 

crawl_url = requests.get('https://www.justdial.com/Mumbai/Dairy-Product- 
Retailers-in-Thane/nct-10152687', headers={'User-Agent': 'Mozilla/5.0'}) 
crawl_url.raise_for_status() 


soup = bs4.BeautifulSoup(crawl_url.text, 'lxml') 

for elems in soup.find_all('span', class_="jcn"): 
    select_a = elems.select('a') 
    for links in select_a: 
     href = links.get('href') 
     res = requests.get(href, headers={'User-Agent': 'Mozilla/5.0'}) 

     xsoup = bs4.BeautifulSoup(res.text, 'lxml') 

     Name = xsoup.select('.fn') 
     tel = xsoup.select('.tel') 
     add = xsoup.select('.adrstxtr') 
     a = Name[0] 
     b = tel[0] 
     c = add[0] 
     print(a.getText()) 
     print("--"*10) 
     print(b.getText()) 
     print("--"*10) 
     print(c.getText()) 
     print("=="*25) 

当我们向下滚动霸GE等物品装入了 所以我想知道如何得到数据的任何数字/项目我想

我试图this

但没有声张很好理解的,也是我没得到了POST方法:/

如果需要更多的信息告诉我的tmadam给出

+1

你可以将你的代码包装在一个函数中,并使用一个循环来获得下一页,并将html传递给该函数。 –

+0

谢谢!!这工作:) – lightfast

回答

2

解决方案工作 这里是代码

import requests 
import bs4 

def spider(max_pages): 
    page = 1 
    while page < max_pages: 
     url = "https://www.justdial.com/Mumbai/Dairy-Product-Retailers-in- 
Thane/nct-10152687/page-%s" % page 
     crawl_url = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}) 
     crawl_url.raise_for_status() 
     soup = bs4.BeautifulSoup(crawl_url.text, 'lxml') 
     for elems in soup.find_all('span', class_="jcn"): 
      select_a = elems.select('a') 
      for links in select_a: 
       href = links.get('href') 
       res = requests.get(href, headers={'User-Agent': 
'Mozilla/5.0'}) 
       xsoup = bs4.BeautifulSoup(res.text, 'lxml') 
       Name = xsoup.select('.fn') 
       tel = xsoup.select('.tel') 
       add = xsoup.select('.adrstxtr') 
       a = Name[0] 
       b = tel[0] 
       c = add[0] 
       print(a.getText()) 
       print("--"*10) 
       print(b.getText()) 
       print("--"*10) 
       print(c.getText()) 
       print("=="*25) 
     page += 1 


spider(3) 
+0

我会导入时间,并在你的循环中放一个time.sleep(1)或time.sleep(2),以避免最大化服务器或被禁止。 –

+0

甚至更​​好_random_睡眠... –

+0

我从来没有遇到过像这个网站得到取缔任何问题,但我仍把time.sleep并添加异常原因后,我发现了一些商店还没有给他们的电话号码。 – lightfast