是否有更好的方法来处理这些Python循环?

时间:2015-02-20 02:58:43

标签: python python-3.x

我正在完成抓取准备功能,其中结果页面会导致产品页面。该函数具有默认的最大结果页数或每组结果的页数,以便进行爬网以防止出现简单错误。

这是我到目前为止所拥有的。我用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=')

1 个答案:

答案 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