抓取和打印的数据只是每页的第一个条目,但我需要所有数据
Data getting scraped and printed is only the first entry of each page but I need all the data
我遇到一个问题,我抓取的代码只打印出每页的第一个条目。我需要的是网站所有三个页面的所有数据都被抓取并添加到列表 'infoList'.
我认为是声明 'CAR_INFO = 0' 的问题,但我不确定如何解决它。任何提示或正确方向的推动将不胜感激。
我的代码:
import time
from selenium import webdriver
from bs4 import BeautifulSoup
import re
DRIVER_PATH = r"C:\Users\salmou\Downloads\chromedriver_win32\chromedriver.exe"
URL = "https://vancouver.craigslist.org/"
browser = webdriver.Chrome(DRIVER_PATH)
browser.get(URL)
time.sleep(4)
SEARCH_TERM = "Honda"
search = browser.find_element_by_css_selector("#query")
search.send_keys(SEARCH_TERM)
search.send_keys(u'\ue007')
class ScrapedData:
carInfo = ""
def __init__(self, carInfo):
self.carInfo = carInfo
def scrapedCarInfo(self):
print(SEARCH_TERM + " information: " + self.carInfo)
print("****")
infoList = []
for i in range(0,3):
content = browser.find_elements_by_css_selector(".hdrlnk")
for e in content:
start = e.get_attribute("innerHTML")
soup= BeautifulSoup(start, features=("lxml"))
rawString = soup.get_text().strip()
# print(soup.get_text())
# print("*****************************************************")
button = browser.find_element_by_css_selector(".next")
button.click()
time.sleep(3)
rawString = re.sub(r"[\n\t]*", "", rawString)
# Replace two or more consecutive empty spaces with '*'
rawString = re.sub('[ ]{2,}', '*', rawString)
infoArray = rawString.split('*')
CAR_INFO = 0
carInfo = infoArray[CAR_INFO]
objInfo = ScrapedData(carInfo)
infoList.append(objInfo)
for info in infoList:
info.scrapedCarInfo()
我看到您有 2 个循环:外部循环 i
和内部循环 e
,但我在循环中看不到任何对当前 i
值的引用。所以看起来你正在执行 3 次相同的操作。
此外,在内部循环中定义和评估的 rawString
仅在外部循环中处理。所以在外循环中只处理内循环中收到的最新值 rawString
。这可能会导致您的问题。
我遇到一个问题,我抓取的代码只打印出每页的第一个条目。我需要的是网站所有三个页面的所有数据都被抓取并添加到列表 'infoList'.
我认为是声明 'CAR_INFO = 0' 的问题,但我不确定如何解决它。任何提示或正确方向的推动将不胜感激。
我的代码:
import time
from selenium import webdriver
from bs4 import BeautifulSoup
import re
DRIVER_PATH = r"C:\Users\salmou\Downloads\chromedriver_win32\chromedriver.exe"
URL = "https://vancouver.craigslist.org/"
browser = webdriver.Chrome(DRIVER_PATH)
browser.get(URL)
time.sleep(4)
SEARCH_TERM = "Honda"
search = browser.find_element_by_css_selector("#query")
search.send_keys(SEARCH_TERM)
search.send_keys(u'\ue007')
class ScrapedData:
carInfo = ""
def __init__(self, carInfo):
self.carInfo = carInfo
def scrapedCarInfo(self):
print(SEARCH_TERM + " information: " + self.carInfo)
print("****")
infoList = []
for i in range(0,3):
content = browser.find_elements_by_css_selector(".hdrlnk")
for e in content:
start = e.get_attribute("innerHTML")
soup= BeautifulSoup(start, features=("lxml"))
rawString = soup.get_text().strip()
# print(soup.get_text())
# print("*****************************************************")
button = browser.find_element_by_css_selector(".next")
button.click()
time.sleep(3)
rawString = re.sub(r"[\n\t]*", "", rawString)
# Replace two or more consecutive empty spaces with '*'
rawString = re.sub('[ ]{2,}', '*', rawString)
infoArray = rawString.split('*')
CAR_INFO = 0
carInfo = infoArray[CAR_INFO]
objInfo = ScrapedData(carInfo)
infoList.append(objInfo)
for info in infoList:
info.scrapedCarInfo()
我看到您有 2 个循环:外部循环 i
和内部循环 e
,但我在循环中看不到任何对当前 i
值的引用。所以看起来你正在执行 3 次相同的操作。
此外,在内部循环中定义和评估的 rawString
仅在外部循环中处理。所以在外循环中只处理内循环中收到的最新值 rawString
。这可能会导致您的问题。