Python web scraping userlist

时间:2018-01-09 07:56:25

标签: python python-requests

我试图从网站上抓取一个用户列表,但它有多个页面,我可以抓第一个页面,但在抓取每个页面时会卡住。

代码 -

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

所以它没有尝试超过页面并且空白。

3 个答案:

答案 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循环遍历这些页面。您将以某种方式需要查看页面是否有任何条目,以便在完成时处理循环的条件。