Мой код l oop через URL, а не страницы в URL Python - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь извлечь имена и комментарии из URL, и мой код перебирает URL-адреса, но не страницы с ним

len (name) дает 37

urls = ['https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/','https://www.f150forum.com/f118/adaptive-cruise-control-sensor-blockage-446041/']

name=[]

for url in urls:
    with requests.Session() as req:
        for item in range(1,3):
            response = req.get(f"{url}index{item}/")
            soup = BeautifulSoup(response.content, "html.parser")
            posts = soup.find(id = "posts")
            threadtitle = soup.find('h1',attrs={"class":"threadtitle"})
            for item in soup.findAll('a',attrs={"class":"bigusername"}):
                result = [item.get_text(strip=True, separator=" ")]
                name.append(result)


где, как, когда я я пытаюсь запустить этот код

for url in urls:
    with requests.Session() as req:
        for item in range(1,3):
            response = req.get(f"{url}index{item}/")
            soup = BeautifulSoup(response.content, "html.parser")
            posts = soup.find(id = "posts")
            threadtitle = soup.find('h1',attrs={"class":"threadtitle"})
        for item in soup.find_all('div', class_="ism-true"):
            try:
                item.find('div', class_="panel alt2").extract()                  
            except AttributeError:
                pass 
            try:
                item.find('label').extract()
            except AttributeError:
                pass
            result = [item.get_text(strip=True, separator=" ")]
            comments1.append(item.text.strip())

len (comments1) дает только 17, это только извлечение page2, которая является последней страницей в диапазоне. Как я могу убедиться, что мой код перебирает все страницы.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Если вы хотите, чтобы l oop просматривал все страницы, вы можете перейти к следующей ссылке, пока она не будет отключена.

Код :

urls = ['https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/',
        'https://www.f150forum.com/f118/adaptive-cruise-control-sensor-blockage-446041/']

name = []

for url in urls:
    with requests.Session() as req:
        index = 1
        while (True):

            # Checking url here
            print(url + "index{}/".format(index))
            response = req.get(url + "index{}/".format(index))
            index = index + 1
            soup = BeautifulSoup(response.content, "html.parser")

            posts = soup.find(id="posts")
            threadtitle = soup.find('h1', attrs={"class": "threadtitle"})
            for item in soup.findAll('a', attrs={"class": "bigusername"}):
                result = [item.get_text(strip=True, separator=" ")]
                name.append(result)
            # Check here next link is disable.
            if 'disabled' in soup.select_one('a#mb_pagenext').attrs['class'][-1]:
                break

print(len(name))

Вкл. Консоль, которую вы видите, печатает все страницы URL и общее количество имен.

https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index1/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index2/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index3/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index4/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index5/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index6/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index7/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index8/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index9/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index10/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index11/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index12/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index13/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index14/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index15/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index16/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index17/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index18/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index19/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index20/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index21/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index22/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index23/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index24/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index25/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index26/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index27/
https://www.f150forum.com/f118/2018-adding-adaptive-cruise-control-415450/index28/
https://www.f150forum.com/f118/adaptive-cruise-control-sensor-blockage-446041/index1/
https://www.f150forum.com/f118/adaptive-cruise-control-sensor-blockage-446041/index2/
280
0 голосов
/ 23 января 2020

Ваш код очень тщательно просматривает оба значения индекса в range(1,3), игнорируя результаты ваших выборок. После выхода из этого l oop, , затем вы оперируете остатком soup, который является последним из предыдущего l oop.

Если вы хотите перебирая содержимое каждого soup, вы должны сделать отступ для второго l oop, чтобы сделать его внутренним l oop:

    ...
        threadtitle = soup.find('h1',attrs={"class":"threadtitle"})
        for inner in soup.find_all('div', class_="ism-true"):
            try:
                inner.find('div', class_="panel alt2").extract() 
        ...

Это вас заводит?

...