我试图从网站上抓取一个用户列表,但它有多个页面,我可以抓第一个页面,但在抓取每个页面时会卡住。
代码 -
from bs4 import BeautifulSoup
import requests
source = requests.get('example.com/users.php?page=1').text
soup = BeautifulSoup(source, 'lxml')
for profile in soup.select("li h3 a"):
print(profile.text)
在网址中注明
page=1
下一页,是
page=2
等等,所以我的问题是如何让python先刮,然后是第二个等等。如果我可以为它指定一个页面限制,那会更有效,比如
1-1000
所以它没有尝试超过页面并且空白。
答案 0 :(得分:2)
no_of_user_to_scrape = 20
for page_no in range(1, no_of_user_to_scrape): # iterate over pages
response = requests.get("http://example.com/users.php", params={"page": page_no}) # will construct url like http://example.com/users.php?page=page_no where page_no is iteration 1,2,3....
# rest of the code goes here....
soup = BeautifulSoup(response.text, 'lxml')
for profile in soup.select("li h3 a"):
print(profile.text)
答案 1 :(得分:1)
试试这个
from bs4 import BeautifulSoup
import requests
page_size = 0
for page_no in range(1,1000):
source = requests.get('example.com/users.php?page={}'.format(page_size)).text
page_size += 20
soup = BeautifulSoup(source, 'lxml')
for profile in soup.select("li h3 a"):
print(profile.text)
答案 2 :(得分:0)
如果您的刮刀也适用于example.com/users.php?page=2
,您可以使用额外的for循环遍历这些页面。您将以某种方式需要查看页面是否有任何条目,以便在完成时处理循环的条件。