Python,无法将我的代码转换为while循环

时间:2019-11-06 21:40:38

标签: python

进行一个个人网络抓取项目来教自己使用python,但是在解析了我的数据(配置文件的年龄/性别)后,无论将其重新格式化如何,它都很难将它变成while循环,这给我带来了不同错误,没有for循环,代码仅在一页上工作,我需要它在页面之间循环,直到列表的长度达到40。

link_list = 0
page_num = 1
while (len(link_list)) < 40:
    page_link = ('https://google.com/page=' + str(page))
    browser.get(page_link)
    age_sex = browser.find_elements_by_xpath('//*[@class="lh-copy truncate silver"]')
    page = page + 1
    link_sex_candidates = (
        (ii.find_element_by_xpath('.//a').get_attribute('href'),
         ii.find_element_by_xpath('.//span').text)
        for ii in age_sex
    )
link_sex_filtered = [
    (link, sex) 
    for link, sex in link_sex_candidates 
    if sex[2:3] != 'F'
]
link_list = [link for link, sex in link_sex_filtered]
sex_list = [sex for link, sex in link_sex_filtered]

 Error Message:
 Traceback (most recent call last):
 File "C:\Users\artur\Desktop\do not delete final.py", line 31, in <module>
 while (len(link_list)) < 40:
 TypeError: object of type 'int' has no len()

我知道此错误消息的含义,并且我认为如果我在while循环之外定义link_list,它将得到纠正。感谢您提供的任何帮助。

编辑:在引入while循环之前,有人问我代码:

age_sex = browser.find_elements_by_xpath('//*[@class="lh-copy truncate silver"]')

link_sex_candidates = (
    (ii.find_element_by_xpath('.//a').get_attribute('href'),
     ii.find_element_by_xpath('.//span').text)
    for ii in age_sex
)
link_sex_filtered = [
    (link, sex)
    for link, sex in link_sex_candidates
    if sex[2:3] != 'F'
]
link_list = [link for link, sex in link_sex_filtered]
sex_list = [sex for link, sex in link_sex_filtered]

2 个答案:

答案 0 :(得分:0)

您立即失败,因为在尝试进入link_list循环时while是一个整数。它没有长度。它是一个标量。直到退出循环后,它才是列表。您不会在循环中的任何地方累积这些链接。您需要理清自己的逻辑:每次通过循环重新进行一次操作,过滤哪些内容以及累积哪些内容,一次迭代一次。

答案 1 :(得分:0)

您想要这样的东西吗?在这里,我使用的是range(),而不是您在计数的时间。您编写它的方式我没有看到同时拥有page_num和link_list的意义,因为您并未真正使用link_list。希望这可以帮助您指出正确的方向。

link_list = []
sex_list = []
page = 1

while len(link_list) < 40:
    page_link = ('https://google.com/page=' + str(page))
    browser.get(page_link)
    age_sex = browser.find_elements_by_xpath(
        '//*[@class="lh-copy truncate silver"]')
    for item in age_sex:
        link = item.find_element_by_xpath('.//a').get_attribute('href')
        sex = item.find_element_by_xpath('.//span').text
        if sex[2:3] != 'F':
            link_list.append(link)
            sex_list.append(sex)
    page += 1

print(link_list)

编辑:编辑了我的答案,以使用while而不是for,因为它应在40次出现时停止,而不是单独浏览40页。

Edit2:仅将匹配的结果添加到link_list