进行一个个人网络抓取项目来教自己使用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]
答案 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