如何解决数据被抓取和打印只是每页的第一个条目,但我需要所有数据
我遇到了一个问题,我正在抓取的代码仅打印出每页的第一个条目。我需要的是网站所有三个页面的所有数据都被抓取并添加到列表“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
才会在外循环中处理。这可能会导致您的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。