与Python 2.7.9分页网络爬虫

问题描述:

我试图用Python 2.7.9编写一个程序抓取,并从该网站http://tennishub.co.uk/与Python 2.7.9分页网络爬虫

聚集了俱乐部的名字,地址和电话号码下面的代码能够完成任务,但它不会移动到每个位置的后续页面上,例如

/Berkshire/1 
/Berkshire/2 
/Berkshire/3 

..等等。

import requests 
from bs4 import BeautifulSoup 


def tennis_club(): 
    url = 'http://tennishub.co.uk/' 
    r = requests.get(url) 
    soup = BeautifulSoup(r.text) 
    for link in soup.select('div.countylist a'): 
     href = 'http://tennishub.co.uk' + link.get('href') 
     pages_data(href) 


def pages_data(item_url): 
    r = requests.get(item_url) 
    soup = BeautifulSoup(r.text) 
    g_data = soup.select('table.display-table') 

    for item in g_data: 
     print item.contents[1].text 
     print item.contents[3].findAll('td')[1].text 
     try: 
      print item.contents[3].find_all('td',{'class':'telrow'})[0].text 
     except: 
      pass 
     try: 
      print item.contents[5].findAll('td',{'class':'emailrow'})[0].text 
     except: 
      pass 
     print item_url 


tennis_club() 

我尝试调整代码,尽我所能了解,但它根本不起作用。

有人可以请告诉我该怎么做,以便程序遍历一个位置的所有页面,收集数据并移动到下一个位置等等。

你将需要把另一个for循环这个代码:

for link in soup.select('div.countylist a'): 
    href = 'http://tennishub.co.uk' + link.get('href') 
    # new for loop goes here # 
     pages_data(href) 

如果你想蛮力它,你只需要在for循环去多次与大多数俱乐部的面积(萨里),但是你可以将双人,三人,四人等统计为许多地区的最后一个俱乐部。这很丑陋,但如果您使用的是不插入重复项的数据库,则可以避开它。但是,如果您正在写入文件,这是不可接受的。在这种情况下,您需要在区域Berkshire(39)之后的括号内拉出数字。为了得到这个数字,你可以在div.countylistget_text()这将改变上面

for link in soup.select('div.countylist'): 
    for endHref in link.find_all('a'): 
      numClubs = endHref.next 
      #need to clean up endHrefNum here to remove spaces and parens 
      endHrefNum = numClubs//10 + 1 #add one because // gives the floor 
      href = 'http://tennishub.co.uk' + endHref.get('href') +/+ endHrefNum 
      pages_data(href) 

(免责声明:我没有通过BS4运行此所以有可能是语法错误(和你可能需要使用的东西除了.next,但逻辑应该对你有帮助)