与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.countylist
做get_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
,但逻辑应该对你有帮助)