import urllib2
import re
import csv
from bs4 import BeautifulSoup
def get_BlahBlah(num1, num2, num3, num4):
url1 = "http://BlahBlah.com/person_profile/"
url2 = "?-id="
url3 = "."
url4 = "&source=personalranking="
urlComplete = url1 + str(num1) + url2 + str(num2) + url3 + str(num3) + url4 + str(num4)
page = urllib2.urlopen(urlComplete)
soup_BlahBlah = BeautifulSoup(page, "lxml")
page.close()
rank_tag = soup_BlahBlah.find('h1', class_="personal_rank")
if rank_tag:
rank_string = rank_tag.span.string
return rank_string
for num1_count in range(28343512, 28343512):
for num2_count in range(9999888888, 9999888889):
for num3_count in range (7777, 7778):
for num4_count in range(0, 1):
record = get_BlahBlah(num1_count, num2_count, num3_count, num4_count)
saveFile = open('BlahBlah.csv', 'a')
saveFile.write(str(record)+'\n')
saveFile.close()
num4_count += 1
num3_count += 1
num2_count += 1
num1_count += 1
上面的代码可以正常工作,但我想根据我的需要更好、更有效地调整它。我想做的是为每个独特的人抓取和提取“等级”信息(用户类“personal_rank”标签)。我想抓取整个站点中的所有人。
该站点的 URL 结构由各种静态和可变(数字)部分组成,例如:
http://BlahBlah.com/person_profile/XXXXXXXX?-id=XXXXXXXXXX.XXXX&source=personalranking=X *注意这不是我要爬的网站,只是作为例子
其中 X 可以是 0-9 之间的任何数字。这是我的三个不同的问题:
假设 URL 上的所有数字部分对于一个人来说都是唯一的,我可以像我当前的代码一样循环遍历多个循环,是否还有其他方法(更有效)我应该做(而不是四个循环,因为我发现它非常耗时)。
现在,假设只有 num1_count 对单个人是唯一的,并且 num2_count、num3_count 和 num4_count 部分可以是任意组合(只要对应的数字保持不变)并且仍然指的是同一个人(参见下面的示例) ,如何使用正则表达式替换我当前的代码?如果我使用正则表达式来表示部分 URL,我如何将它与循环结合起来?
1) http://BlahBlah.com/person_profile/12345678?-id=1111111111.1111&source=personalranking=1 指彼得潘 2) http://BlahBlah.com/person_profile/12345678?-id=2222222222.1111&source=personalranking=1 也指彼得潘 3) http://BlahBlah.com/person_profile/12345670?-id=2222222222.1111&source=personalranking=1 指罗宾金
- 跟进第 2 点,假设 num1_count-num3_count 的位数很重要,但最后一个数字部分在某种意义上无关紧要,它可以是一位数或两位数,仍然指的是同一个人,如何我可以编码吗?
提前致谢。