Могу ли я найти элемент, вложенный в тег в beautifulsoup? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть веб-сайт https://www.medline.com/catalog/category-products.jsp?No=0&itemId=Z05-CA11_07_03&N=104048&iclp=Z05-CA11_07_03, который я буду сканировать sh.

Мне нужно go на ссылку каждого продукта, xpath которого задается как:

//div[@class='medGridProdTitle']//a

Я написал следующий фрагмент кода, чтобы получить все эти ссылки. Но для всех он возвращает none. Я знаю, что не включил a в тег, и это создает проблемы, но я не знаю, как я могу это сделать.

import requests
import xlsxwriter
from bs4 import BeautifulSoup 
def cpap_spider(max_pages):
    global row_i
    page=0
    while page<=max_pages:
        url= "https://www.medline.com/catalog/category-products.jsp?No="+str(page)+"&itemId=Z05-CA11_07_03&N=104048&iclp=Z05-CA11_07_03"
        source_code= requests.get(url)
        plain_text= source_code.text
        soup= BeautifulSoup(plain_text, 'html.parser')
        for link in soup.findAll("div", {"class":"medGridProdTitle"}):
            href=link.get("href")
            title = link.string
            
            print(href)
            #print(title)
        page+=12
cpap_spider(156)

Любая помощь по этому поводу будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Так что вам просто нужно немного изменить способ нахождения href. Вот пример

import requests
from bs4 import BeautifulSoup 
def cpap_spider(max_pages):
    global row_i
    page=0
    while page<=max_pages:
        url= "https://www.medline.com/catalog/category-products.jsp?No="+str(page)+"&itemId=Z05-CA11_07_03&N=104048&iclp=Z05-CA11_07_03"
        source_code= requests.get(url)
        plain_text= source_code.text
        soup= BeautifulSoup(plain_text, 'html.parser')
        links = soup.findAll("div", {"class":"medGridProdTitle"})
        for link in links:
            print(link.find('a')['href']) # this is the line you have to change.
        page+=12
cpap_spider(156)
0 голосов
/ 09 июля 2020

Попробуйте:

def cpap_spider(max_pages):
    global row_i
    page=0
    while page<=max_pages:
        url= "https://www.medline.com/catalog/category-products.jsp?No="+str(page)+"&itemId=Z05-CA11_07_03&N=104048&iclp=Z05-CA11_07_03"
        source_code= requests.get(url)
        plain_text= source_code.text
        soup= BeautifulSoup(plain_text, 'lxml')
        for link in soup.findAll("div", {"class":"medGridProdTitle"}):
            href = link.find("a")['href']
                       
            print(href)
            
        page+=12
0 голосов
/ 09 июля 2020

угадайте, что это именно то, что вы ищете, вам следует заменить get на find и там, после индексации тегов a, получить их href

import requests
from bs4 import BeautifulSoup


def cpap_spider(max_pages):
    global row_i
    page = 0
    while page <= max_pages:
        url = "https://www.medline.com/catalog/category-products.jsp?No=" + str(
            page) + "&itemId=Z05-CA11_07_03&N=104048&iclp=Z05-CA11_07_03"
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, 'html.parser')
        for link in soup.findAll("div", {"class": "medGridProdTitle"}):
            href = link.find("a")['href']
            print(href)
            title = link.string

            # print(href)
            # print(title)
        page += 12


cpap_spider(156)

...