我正在完成抓取准备功能,其中结果页面会导致产品页面。该函数具有默认的最大结果页数或每组结果的页数,以便进行爬网以防止出现简单错误。
这是我到目前为止所拥有的。我用for循环实现最大值的方式是否有意义?还有更多" pythonic"办法?我从一个完全学习的角度来看这个。感谢。
def my_crawler(url, max_pages = 1, max_items = 1):
for page_number in range(1, max_pages + 1):
url = url + str(page_number)
source_code = requests.get(url).text
products = SoupStrainer(class_ = 'productTags')
soup = BeautifulSoup(source_code, 'html.parser', parse_only=products)
for item_number, a in enumerate(soup.find_all('a')):
print(str(item_number) + ': ' + a['href'])
if item_number == max_items - 1: break
my_crawler('http://www.thesite.com/productResults.aspx?&No=')
答案 0 :(得分:2)
for
循环很好,但是
def my_crawler(url, max_pages = 1, max_items = 1):
for page_number in range(1, max_pages + 1):
url = url + str(page_number)
^
|
您已更改url
参数;下一次循环这将无法正常工作(您将寻找第1页,第12页,第123页......)
尝试改为
source_code = requests.get(url + str(page_number)).text
这会创建一个临时字符串,而不会更改url
。