python - 在 python 中先抓取后如何移动到第二页

标签 python selenium beautifulsoup

我正在尝试从速卖通中抓取产品详细信息。我有两个问题。首先,我如何抓取类别并将其保存在每个产品前面的 csv 文件中,其次,我如何移动到第二页和其他页面,直到没有更多可用页面或直到第 10 页。

这是我为查找下一页而编写的代码

from bs4 import BeautifulSoup
import requests as r

page = r.get('https://www.aliexpress.com/category/200000664/jackets.html?spm=2114.11010108.102.4.650c649b8lfPOb')
soup = BeautifulSoup(page.content,'html.parser')

content = soup.find(id="pagination-bottom")

pages = content.findAll('a')

for i in pages:
    print('https:' + i.get('href'))

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

from bs4 import BeautifulSoup import urllib.request 

filename = "alibaba.csv" 
f=open(filename, "w")

headers="product_name, price, Rating \n" 
f.write(headers)


class alibabascrape(object):
    def __init__(self, keyword):
        self.keyword = keyword

        self.url = f"https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText={keyword}"

        self.driver = webdriver.Firefox(executable_path = 'c:\geckodriver.exe')
        self.delay = 3

    def load_alibabalist_url(self):
        self.driver.get(self.url)
        try:
            wait = WebDriverWait(self.driver, self.delay)
            wait.until(EC.presence_of_all_elements_located((By.ID, "form-searchbar")))
            print("page is ready")
        except TimeoutException:
            print("Too much Time")

    def extract_post_information(self):
        all_posts = self.driver.find_elements_by_class_name("list-item")
        post_title_list = []
        for post in all_posts:
            title=post.text.split("\n")
            name=title[0]
            print(name)
            price=title[2]
            print(price)
            rating = title[6]
            print(rating)
            f.write(name + "," + price + "," + rating + "\n")
            post_title_list.append(post.text)

        return post_title_list



    def extract_category(self):
        category = self.driver.find_elements_by_class_name("col-sub")
        print(category)


    def extract_post_urls(self):
        url_list = []
        html_page = urllib.request.urlopen(self.url)
        soup = BeautifulSoup(html_page, "lxml")
        for link in soup.findAll("a", {"class": "history-item product"}):
            print(link["href"])
            url_list.append(link["href"])
        return url_list


keyword = "iphone"
scrapper = alibabascrape(keyword)
scrapper.load_alibabalist_url()
scrapper.extract_post_information()
scrapper.extract_category()
scrapper.extract_post_urls()

最佳答案

我可以帮你做分页:

  1. 如果你得到所有的引用链接,那么你可以简单地使用 for 循环来迭代 所有链接。
  2. 如果您只有上一页或下一页链接。然后使用 while/do while 循环检查链接是否存在,然后单击它。

关于python - 在 python 中先抓取后如何移动到第二页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617855/

相关文章:

python - 在 Jupyter 笔记本中使用 pandas 导入 csv 文件时出现 FileNotFoundError

selenium - 在 webdriver 中找到两个元素中的任何一个

python - 如何使用 Selenium 和 xpath 或其他替代方案从 url 获取包含动态数据的表?

python - BeautifulSoup 在 findAll 中排除一个标签

python - 使用 Python 的正则表达式和 BeautifulSoup

html - 将 io.BytesIO 转换为 io.StringIO 来解析 HTML 页面

python - 在 python 中派生类方法的正确方法是什么?

python - 使用 Python 在 Maya 中导入多个缓存文件

python - 为什么 [1].append(2) 评估为 None 而不是 [1,2]?

python - 当 xpath = 没有这样的元素时停止循环